*nix 用の Python では、time.sleep()
スレッドまたはプロセスがブロックされますか?
ベストアンサー1
スレッドをブロックします。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