5

私の理解では、gevent.monkey.patch_all() を呼び出すと、標準のスレッド化モジュールが Python スレッドの代わりに greenlets を使用するように変更されます。したがって、Python スレッド、ロック、セマフォなどの観点からアプリケーションを作成してから patch_all を呼び出した場合、gevent のメリットを十分に享受できますか?それとも明示的な gevent と同等のものを使用する場合と比較して、何かを失うことになりますか?

この質問の背後にある動機は、いくつかのスレッド/グリーンレットを使用するモジュールを書いていることです.geventの使用とスレッドの使用を明示的に切り替えることが有用かどうか、または失うことなくthreading + patch_allを使用できるかどうかを決定しています.なんでも。

コードで言うと、これか...

def myfunction():
  print 'ohai'

Greenlet.spawn(myfunction)

・・・これと違う?

import gevent.monkey
gevent.monkey.patch_all()
def mythread(threading.Thread):
  def run(self):
    print 'ohai'

mythread().start()
4

1 に答える 1

2

少なくとも、リンク、キル、結合などの greenlet 固有のメソッドの一部が失われます。また、非常に便利な gevent.pool モジュールなどでスレッドを使用することもできません。また、Thread オブジェクトを作成するためのオーバーヘッドはほとんどありません。

于 2012-08-04T16:31:51.620 に答える