3

--pool = eventletオプションを指定してセロリワーカーを実行すると、amqplib.client_0_8.method_framing.read_methodから多くの「IOError:Socketclosed」例外が発生します。また、eventlet.hubs.hub.switchから多くのタイムアウト例外が発生しています。

https://gist.github.com/821848にあるようなasync_manage.pyスクリプトを使用して、次のような動作を実行しています。

./async_manage.py celeryd_detach -E --pool=eventlet --concurrency=120 --logfile=<path>

これは既知の問題ですか、それとも構成やセットアップに問題がありますか?

djcelery 2.2.4、Django 1.3、eventlet0.9.15を実行しています。

4

1 に答える 1

6

問題は、ブロックしていた一部のコードの副作用でした。この記事で説明されているイベントレットオプションを使用して、ブロックコードを検出することができました。

ブロッキングが発生した場所は、DNSルックアップとMySQLデータベースアクセスの2つでした。最初はdnspythonパッケージをインストールして解決し、2番目はイベントレットでドキュメント化されていないMySQLdbオプションを使用して解決しました。

import eventlet
eventlet.monkey_patch()
eventlet.monkey_patch(MySQLdb=True)
于 2011-06-22T11:43:50.523 に答える