私は gevent をいじっていますが、コードがブロックされている理由とそれを修正する方法を理解しようとしています。
greenlet のプールがあり、それぞれがリモートのリサイクル サーバーからデータを収集するリサイクル クライアントと通信します。この演習では、thrift サーバーがデータを返すのに常に 1 秒以上かかります。グリーンレットをスポーンして join を実行すると、すべてが並行して実行されるのではなく、1 つずつ実行されます。私の理解では、コードが「ブロック」されているためにこれが発生していると理解monkey.patch_all()
しています.
では、サルがすべてにパッチを当てて、それが何をしているのか理解しないのではなく、自分でコードをブロックしないようにするにはどうすればよいでしょうか?
私が理解していないことの例:
import time
from gevent.pool import Pool
def hello():
print 'Hello %d' % time.time()
time.sleep(1)
def main():
pool = Pool(5)
for _ in xrange(5):
pool.spawn(hello)
pool.join()
if __name__ == '__main__':
main()
出力
Hello 1345477112
Hello 1345477113
Hello 1345477114
Hello 1345477115
Hello 1345477116
gevent.sleep を使用できることはわかっていますが、その関数を通常の time.sleep でブロックしないようにするにはどうすればよいですか?
ありがとう