time.sleep: mette in pausa il thread o il processo?
-
01-07-2019 - |
Domanda
In Python per *nix, lo fa time.sleep()
bloccare il thread o il processo?
Soluzione
Blocca il thread.Se guardi in Modules/timemodule.c nel sorgente Python, lo vedrai nella chiamata a floatsleep()
, la parte sostanziale dell'operazione di sospensione è racchiusa in un blocco Py_BEGIN_ALLOW_THREADS e Py_END_ALLOW_THREADS, consentendo ad altri thread di continuare l'esecuzione mentre quello corrente dorme.Puoi anche testarlo con un semplice programma 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()
Che stamperà:
>>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102
Altri suggerimenti
Dormirà semplicemente il thread tranne nel caso in cui l'applicazione abbia un solo thread, nel qual caso dormirà il thread e in effetti anche il processo.
La documentazione di Python su sleep tuttavia non lo specifica, quindi posso sicuramente capire la confusione!
Solo il filo.
Il thread verrà bloccato, ma il processo è ancora attivo.
In un'applicazione a thread singolo, ciò significa che tutto è bloccato mentre dormi.In un'applicazione multithread, solo il thread esplicitamente "sonno" verrà bloccato e gli altri thread continueranno a essere eseguiti all'interno del processo.
Solo il thread a meno che il processo non abbia un singolo thread.
Il processo non è eseguibile da solo.Per quanto riguarda l'esecuzione, il processo è solo un contenitore per i thread.Ciò significa che non puoi assolutamente mettere in pausa il processo.Semplicemente non è applicabile al processo.