time.sleep - dort le fil ou le processus?
-
01-07-2019 - |
Question
En Python pour * nix, time.sleep ()
bloque-t-il le thread ou le processus?
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!
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.