2012-08-03 4 views
5

私はgevent.monkey.patch_all()を呼び出した後、標準のスレッドモジュールを修正して、pythonスレッドの代わりにgreenletsを使うようにしています。だから、私はPythonスレッド、ロック、セマフォーなどの観点からアプリケーションを書いてから、patch_allを呼び出すと、geventの完全な利益を得ているのだろうか、あるいは明示的なgevent同等物を使うのと比べて何かを失っているのだろうか?パッチを当てたスレッディングとネイティブ・ジヴェント・グリーンレットの使用の欠点はありますか?

この質問の背景には、いくつかのスレッド/グリーンレットを使用するモジュールを作成しており、geventを使用してスレッドを使用するかどうかを明示的に切り替えることが有用かどうか、またはスレッド+ patch_all何も失うことなく。

が...これは、コードでこれまで何が違うの

def myfunction(): 
    print 'ohai' 

Greenlet.spawn(myfunction) 

を...それを置くために?非常に便利なことができ、リンク殺す、参加など また、あなたは、例えば、とgevent.poolモジュールをスレッドを使用することはできません、:

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

mythread().start() 

答えて

2

少なくともあなたgreenlet固有のメソッドの一部を失うことになります。 そして、Threadオブジェクトを作成するためのオーバーヘッドはほとんどありません。

関連する問題