12

セロリには、amqp または他のセロリ バックエンドを使用して非同期 HTTP リクエストを作成できるモジュールが含まれています。非同期メッセージ発行にtornado-celeryプロデューサーを使用しています。私が理解したように、トルネードセロリはこれにピカを使用しています。問題は、トルネード用に celery.task.http.URL をどのように適応させるか (ブロックしないようにする) です。基本的に、洗練されなければならない 2 つの場所があります。

  1. HttpDispatch.make_request()tornado async http クライアントを使用して実装する必要があります。
  2. 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 バックエンドを使用しています。

良いガイドライン、またはさらに良い例を教えてください。

4

1 に答える 1