/ / Gevent:それぞれのfor-loopの反復処理で得られるのは良い習慣ですか? - python、gevent、greenlets

Gevent:それぞれのfor-loopの反復処理で得られるのは良い習慣ですか? - python、gevent、greenlets

私はNode.jsから来ています。 https://github.com/caolan/async イベントループをブロックすることなく、配列を介して非同期的に反復することができます。

Geventと同じことを達成することは、 sleep(0) 各ループ反復で?

dbクエリを解析するときや、(IO操作ではない)Pythonコードのブロック時間が無視できるときに、これは実際にWebサーバーにとって必要ですか?

回答:

回答№1は2

Geventには gevent.idle() その目的のためだけに電話してください(文書化されていないようです: http://www.gevent.org/gevent.html#useful-general-functions)。

しかし、ループでCPUの処理に時間がかかることが確実であれば、それを本当に並行作業者にオフロードする方が良いでしょう。 multiprocessing あなたはGeventとうまく作業するために余分な措置を講じる必要があります(afaik)。


回答№2の場合は0

一般的には、

ただし、アレイ全体を処理するために必要なCPU時間が非常に長い場合、作成するレイテンシは許容されませんので、すべてを別のプロセス/タスクキューシステムにオフロードする必要があります。

あなたが眠る(0)たびに、オーバーヘッドを増やす(スイッチを入れ替える)ので、悪化させるようなものです。

CPUバウンドタスクとIOバウンドタスクは、同じプロセスでうまく融合しません。

代わりに、同時に多くの接続が必要ない場合は、geventをpre-forkサーバーに置き換えてください。