セロリには、amqp または他のセロリ バックエンドを使用して非同期 HTTP リクエストを作成できるモジュールが含まれています。非同期メッセージ発行にtornado-celeryプロデューサーを使用しています。私が理解したように、トルネードセロリはこれにピカを使用しています。問題は、トルネード用に celery.task.http.URL をどのように適応させるか (ブロックしないようにする) です。基本的に、洗練されなければならない 2 つの場所があります。
HttpDispatch.make_request()
tornado async http クライアントを使用して実装する必要があります。URL.get_async(**kw)
またはURL.post_async(**kw)
、tornado API を使用して、対応するノンブロッキング コードで再実装する必要があります。例えば:class NonBlockingURL(celery.task.http.URL): @gen.coroutine def post_async(self, **kwargs): async_res = yield gen.Task(self.dispatcher.delay, str(self), 'POST', **kwargs) raise gen.Return(async_res)
しかし、適切かつ簡潔な方法でそれを行う方法を理解できませんでした。非同期のように完全にノンブロッキングにする方法は? ところで、私は amqp バックエンドを使用しています。
良いガイドライン、またはさらに良い例を教えてください。