web-dev-qa-db-ja.com

time.sleep - スレッドまたはプロセスをスリープ状態にする

Python for * nixでは、time.sleep()はスレッドまたはプロセスをブロックしますか?

327
Jeremy Dunck

スレッドをブロックします。 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
307
Nick Bastin

アプリケーションが単一のスレッドしか持っていない場合を除いて、それは単にスレッドをスリープ状態にします。

しかし、sleepに関するpythonのドキュメントにはこれが明記されていませんので、混乱を確実に理解することができます。

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

47
Zach Burlingame

ただのスレッドです。

27
finnw

スレッドはブロックされますが、プロセスはまだ生きています。

シングルスレッドのアプリケーションでは、これはあなたが寝ている間にすべてがブロックされることを意味します。マルチスレッドアプリケーションでは、明示的に 'sleep'したスレッドだけがブロックし、他のスレッドはまだプロセス内で実行されます。

9
Corey Goldberg

プロセスは単独では実行できません。実行に関しては、processは単にスレッドの入れ物です。プロセスを一時停止できないという意味です。それは単にプロセスには適用できません。

2

プロセスにシングルスレッドがない限り、スレッドのみ。

2
Ali Abbasinasab