web-dev-qa-db-fra.com

time.sleep - dort le fil ou le processus?

Dans Python pour * nix, time.sleep() bloque-t-il le fil ou le processus?

338
Jeremy Dunck

Cela bloque le fil. Si vous regardez dans Modules/timemodule.c dans la source Python, vous verrez que dans l'appel à floatsleep(), la partie importante de l'opération de mise en veille est encapsulée dans un bloc Py_BEGIN_ALLOW_THREADS et Py_END_ALLOW_THREADS. , permettant à d'autres threads de continuer à s'exécuter pendant que celui en cours est en veille. Vous pouvez également tester cela avec un simple programme python:

import time
from threading import Thread

class worker(Thread):
    def run(self):
        for x in xrange(0,11):
            print x
            time.sleep(1)

class waiter(Thread):
    def run(self):
        for x in xrange(100,103):
            print x
            time.sleep(5)

def run():
    worker().start()
    waiter().start()

Qui va imprimer:

>>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102
315
Nick Bastin

Il ne fera que mettre le thread en veille, sauf dans le cas où votre application n'a qu'un seul thread, auquel cas elle mettra également le processus en veille.

La documentation python sur le sommeil ne spécifie pas cela, cependant, je peux certainement comprendre la confusion!

http://docs.python.org/2/library/time.html

49
Zach Burlingame

Juste le fil.

28
finnw

Le thread va bloquer, mais le processus est toujours en cours.

Dans une application à un seul thread, cela signifie que tout est bloqué pendant que vous dormez. Dans une application multithread, seul le thread que vous avez explicitement "mis en veille" bloquera et les autres threads seront toujours exécutés dans le processus.

10
Corey Goldberg

Seul le thread, à moins que votre processus n'ait un seul thread.

2
Ali Abbasinasab

Le processus n'est pas exécutable en soi. En ce qui concerne l'exécution, le processus n'est qu'un conteneur pour les threads. Ce qui signifie que vous ne pouvez pas du tout suspendre le processus. Ce n'est tout simplement pas applicable au processus.

1
Denis The Menace