399

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

4

7 に答える 7

396

スレッドをブロックします。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
于 2008-09-18T14:42:23.020 に答える
58

アプリケーションに単一のスレッドしかない場合を除いて、スレッドをスリープ状態にするだけです。その場合、スレッドとプロセスを効果的にスリープ状態にします。

ただし、 Pythonのドキュメントでsleep()はこれが指定されていないため、混乱を理解できます!

于 2008-09-18T14:22:52.677 に答える
36

ただのスレッド。

于 2008-09-18T14:18:51.813 に答える
17

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

シングルスレッドアプリケーションでは、これは、スリープ中にすべてがブロックされることを意味します。マルチスレッドアプリケーションでは、明示的に「スリープ」したスレッドのみがブロックされ、他のスレッドは引き続きプロセス内で実行されます。

于 2008-09-18T14:32:45.787 に答える
4

プロセスに単一のスレッドがない限り、スレッドのみ。

于 2015-08-26T00:21:35.043 に答える
3

プロセスは単独では実行できません。実行に関しては、プロセスは単なるスレッドのコンテナーです。つまり、プロセスを一時停止することはできません。単にプロセスには適用できません。

于 2016-10-28T21:24:44.433 に答える
1

it blocks a thread if it is executed in the same thread not if it is executed from the main code

于 2020-01-20T10:57:32.940 に答える