In Python per * nix, time.sleep()
blocca il thread o il processo?
In Python per * nix, time.sleep()
blocca il thread o il processo?
Risposte:
Blocca il filo. Se guardi in Modules / timemodule.c nel sorgente Python, vedrai che nella chiamata a floatsleep()
, la parte sostanziale dell'operazione sleep è racchiusa in un blocco Py_BEGIN_ALLOW_THREADS e Py_END_ALLOW_THREADS, consentendo ad altri thread di continuare l'esecuzione mentre uno 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
Dormirà solo il thread, tranne nel caso in cui l'applicazione abbia solo un singolo thread, nel qual caso dormirà il thread ed efficacemente anche il processo.
La documentazione di Python in modalità sleep non specifica tuttavia questo, quindi posso certamente capire la confusione!
Il thread si bloccherà, ma il processo è ancora attivo.
In una singola applicazione thread, ciò significa che tutto viene bloccato mentre dormi. In un'applicazione multithread, solo il thread che "dormi" esplicitamente verrà bloccato e gli altri thread verranno comunque eseguiti all'interno del processo.
Il processo non è eseguibile da solo. Per quanto riguarda l'esecuzione, il processo è solo un contenitore per i thread. Ciò significa che non è possibile mettere in pausa il processo. Semplicemente non è applicabile al processo.
sleep
comando mette in pausa.
blocca un thread se viene eseguito nello stesso thread e non se viene eseguito dal codice principale