En Python pour * nix, time.sleep()
bloque-t-il le thread ou le processus?
En Python pour * nix, time.sleep()
bloque-t-il le thread ou le processus?
Réponses:
Il bloque le fil. Si vous regardez dans Modules / timemodule.c dans la source Python, vous verrez que dans l'appel à floatsleep()
, la partie substantielle de l'opération de veille est enveloppé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 on dort. 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 imprimera:
>>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102
Il dormira simplement le thread, sauf dans le cas où votre application n'a qu'un seul thread, auquel cas il dormira le thread et efficacement le processus également.
La documentation de python sur le sommeil ne le précise pas cependant, donc je peux certainement comprendre la confusion!
Le thread se bloquera, mais le processus est toujours en cours.
Dans une application unique, cela signifie que tout est bloqué pendant que vous dormez. Dans une application multithread, seul le thread que vous "dormez" explicitement bloquera et les autres threads s'exécuteront toujours dans le processus.
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 interrompre le processus du tout. Il n'est tout simplement pas applicable au processus.
sleep
commande mettra en pause.
il bloque un thread s'il est exécuté dans le même thread pas s'il est exécuté à partir du code principal