Question

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

Était-ce utile?

La solution

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 sleep 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 le courant 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()

Ce qui sera imprimé:

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

Autres conseils

Il ne fera que mettre le thread en veille, sauf dans le cas où votre application ne comporte qu'un seul thread. Dans ce cas, le processus sera également mis en veille, ainsi que le processus.

La documentation de Python sur le sommeil ne le précise pas, je peux donc certainement comprendre la confusion!

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

Seulement le fil.

Le thread bloquera, mais le processus est toujours actif.

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.

Seulement le thread, à moins que votre processus ne comporte qu'un seul thread.

Le processus n'est pas exécutable par lui-même. En ce qui concerne l'exécution, le processus n'est qu'un conteneur pour les threads. Cela signifie que vous ne pouvez pas du tout suspendre le processus. Il n’est tout simplement pas possible de traiter.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top