Domanda

In Python per *nix, lo fa time.sleep() bloccare il thread o il processo?

È stato utile?

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!

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

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top