回答:
スレッドをブロックします。PythonソースのModules / timemodule.cを見ると、への呼び出しfloatsleep()
で、スリープ操作の実質的な部分がPy_BEGIN_ALLOW_THREADSおよびPy_END_ALLOW_THREADSブロックにラップされているため、現在のスレッドの実行中に他のスレッドが実行を継続できることがわかります一人が眠る。簡単な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()
どちらが印刷されます:
>>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102
アプリケーションにスレッドが1つしかない場合を除いて、スレッドをスリープさせるだけです。その場合、スレッドをスリープさせ、事実上プロセスもスリープさせます。
ただし、スリープに関するPythonのドキュメントではこれを指定していないため、混乱を確実に理解できます。
スレッドはブロックされますが、プロセスはまだ生きています。
シングルスレッドのアプリケーションでは、これはあなたが眠っている間すべてがブロックされることを意味します。マルチスレッドアプリケーションでは、明示的に「スリープ」したスレッドのみがブロックし、他のスレッドはプロセス内で引き続き実行されます。
プロセスはそれ自体では実行できません。実行に関しては、プロセスはスレッドの単なるコンテナーです。つまり、プロセスを一時停止することはできません。プロセスには適用できません。
sleep
コマンドを一時停止するプロセス(抽象的な意味では単一スレッドで)を実行します。
メインコードから実行された場合ではなく、同じスレッドで実行された場合にスレッドをブロックします