0
import threading,gevent,gevent.monkey 
class test(threading.Thread):
  def __init__(self):
    threading.Thread.__init__(self)
  def run(self):
    print 1  
    gevent.sleep(2)  
    print 2
gevent.monkey.patch_thread() 
t=test()  
t.start() 

なぜ「print2」が実行されないのですか、どうすればよいですか?

ファイル、マルチスレッド、geventをダウンロードする場合、どちらが速いですか?

4

2 に答える 2

2

それは有効な質問です。

これは、geventでは、メインのグリーンレットが終了するとすぐにプログラムが終了するためです。スレッド化では、Pythonはすべてのスレッドが終了するのを待ちます。

そこには2つのオプションがあります。

  1. t.join()スクリプトの最後に追加します。これは終了するのを待ちtます。バックグラウンド以外のすべてのスレッドに対してこれを行う必要があります。
  2. gevent.wait()スクリプトの最後に追加します。これは、イベントループが終了するのを待ちます。これは、すべてのグリーンレットとスレッドを意味します。

gevent.wait()これは1.0でのみ利用可能であることに注意してください(ここから1.0rcをダウンロードしてください)。はjoinすべてのバージョンで利用できます。

于 2012-11-07T08:00:01.680 に答える
0

なぜクラス継承geventの中で使おうとするのですか? thread作業例:

>>> import threading, gevent, gevent.monkey 
>>> gevent.monkey.patch_thread() 
>>> def run(self):
...     print 1
...     gevent.sleep(2)
...     print 2
... 
>>> gevent.joinall([gevent.spawn(run, [])])
1
2
>>> 
于 2012-10-29T17:14:46.803 に答える