IOLoop.instance を初期化し、IOLoop.instance() を使用する新しいプロセスをフォークできますか? 何かのようなもの:
#some code which initializes IOLoop.instance() (1)
storage - Storage()
...
def f(storage):
"""some ioloop worker, which uses IOLoop.instance()"""
storage.db_client.send(some value)
...
p1 = Process(target=f, args=(storage,))
p2 = Process(target=f, args=(storage,))
IOLoop のドキュメントでは、マルチスレッドでの IOLoop の使用については何も述べていませんが、tornado.process.fork_processes のドキュメントでは、フォークする前に IOLoop を初期化することを禁止しています。
ポイントは、(1) のコードがstorage
関数によって使用されるオブジェクトを作成することf
です。にはstorage
、ワーカー プロセスと同じ ioloop を使用すると想定される非同期データベース クライアントが含まれています。