Сельдерей включает в себя модуль, который способен создавать асинхронные HTTP-запросы с использованием amqp или какого-либо другого ферментера. Я использую tornado-celery производитель для асинхронной публикации сообщений. Как я понял, tornado-celery использует для этого пику. Вопрос в том, как адаптировать celery.task.http.URL для торнадо (сделать его неблокирующим). В основном есть два места, которые необходимо уточнить:Адаптация celery.task.http.URL для торнадо
HttpDispatch.make_request()
должны быть реализованы с использованием tornado async http client;URL.get_async(**kw)
илиURL.post_async(**kw)
необходимо переопределить соответствующим неблокирующим кодом с использованием 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.
Пожалуйста, предоставьте мне хороший ориентир или еще лучше, пример.
Я понимаю вашу цель. Но я не думаю, что полностью понял проблему, с которой вы столкнулись. Только для «неблокирующей части» вы пробовали [Eventlet] (https://github.com/celery/celery/tree/master/examples/eventlet) или [Планировщик] (http://docs.celeryproject.org) /en/latest/userguide/periodic-tasks.html) с опцией? – user2390183
Просто понял, что это старый пост :) надеюсь, что у вас есть решение. pls делят интересное решение, которое вы, возможно, нашли – user2390183
. Я поделюсь. Ждите парней. –