Python for * nixでは、time.sleep()
はスレッドまたはプロセスをブロックしますか?
スレッドをブロックします。 PythonソースのModules/timemodule.cを見ると、floatsleep()
への呼び出しで、sleep操作の実質的な部分が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
アプリケーションが単一のスレッドしか持っていない場合を除いて、それは単にスレッドをスリープ状態にします。
しかし、sleepに関するpythonのドキュメントにはこれが明記されていませんので、混乱を確実に理解することができます。
ただのスレッドです。
スレッドはブロックされますが、プロセスはまだ生きています。
シングルスレッドのアプリケーションでは、これはあなたが寝ている間にすべてがブロックされることを意味します。マルチスレッドアプリケーションでは、明示的に 'sleep'したスレッドだけがブロックし、他のスレッドはまだプロセス内で実行されます。
プロセスは単独では実行できません。実行に関しては、processは単にスレッドの入れ物です。プロセスを一時停止できないという意味です。それは単にプロセスには適用できません。
プロセスにシングルスレッドがない限り、スレッドのみ。