Python for * nixではtime.sleep()
、スレッドまたはプロセスをブロックしますか?
7 に答える
スレッドをブロックします。Python ソースの Modules/timemodule.c を見ると、 への呼び出しfloatsleep()
で、スリープ操作の実質的な部分が Py_BEGIN_ALLOW_THREADS および Py_END_ALLOW_THREADS ブロックにラップされていることがわかります。 1つは眠ります。簡単な 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
アプリケーションに単一のスレッドしかない場合を除いて、スレッドをスリープ状態にするだけです。その場合、スレッドとプロセスを効果的にスリープ状態にします。
ただし、 Pythonのドキュメントでsleep()
はこれが指定されていないため、混乱を理解できます!
ただのスレッド。
スレッドはブロックされますが、プロセスはまだ生きています。
シングルスレッドアプリケーションでは、これは、スリープ中にすべてがブロックされることを意味します。マルチスレッドアプリケーションでは、明示的に「スリープ」したスレッドのみがブロックされ、他のスレッドは引き続きプロセス内で実行されます。
プロセスに単一のスレッドがない限り、スレッドのみ。
プロセスは単独では実行できません。実行に関しては、プロセスは単なるスレッドのコンテナーです。つまり、プロセスを一時停止することはできません。単にプロセスには適用できません。
it blocks a thread if it is executed in the same thread not if it is executed from the main code