Django — запуск задач сельдерея из C ++ с Redis

У нас есть настройка, где у нас есть веб-интерфейс, запрограммированный в Django и бэкэнд, написанный на C++ который анализирует данные для нас.
Интерфейс использует Celery в комбинации с Redis для асинхронных задач.

Поскольку в некоторых ситуациях это было бы удобно, мне было интересно сегодня, можно ли Celery задача изнутри C++,

Так как есть Redis клиент доступен для C++Я вполне уверен, что это возможно, если правильные сообщения отправляются Redisоднако я нигде не смог найти никакой информации по этому вопросу.

Моим следующим шагом будет попытка выкопать необходимую информацию из Celery исходный код, но прежде чем я это сделаю:

Есть ли у кого-нибудь какая-либо информация на эту тему, которая могла бы помочь мне или начать меня, или есть кто-то, кто делал это раньше?

Любая помощь приветствуется. (Также, если у вас есть причина, почему это не сработает.)

Спасибо.

1

Решение

У меня была похожая необходимость вызвать задачу сельдерея из logstash. По сути, мне пришлось создать сообщение, которое выглядело примерно так:

{
"body": "base_64_encoded_string (see below)",
"content-type": "application/json",
"properties": {
"body_encoding": "base64",
"correlation_id":"f009c9e0-0ca6-42a6-a046-3d0e53e06060",
"reply_to":"e1eb91f0-6780-4c34-b633-7ef9a46baf5e",
"delivery_mode":2,
"delivery_tag": "7788b924-a7fe-4c9a-839e-1c7ca602dbba",
"delivery_info": {
"priority":0,
"routing_key":"default",
"exchange":"default"}
}
}

В этом случае декодированное тело преобразуется в:

{
"args": ["meta_val","doc_value"],
"task":"goldstone.compliance.tasks.process_fim_event",
"id":"23deb69e-49c1-4a61-8639-d4627d0fc591"}

Если у вас есть kwargs в вашей задаче, вы можете добавить kwargs: {"key": "value", ...} к твоему телу.

Тело над картами запускает задачу под названием process_fim_event, Определение задачи выглядит так:

@task()
def process_fim_event(meta, doc):
...
1

Другие решения

Самый простой способ сделать это, о котором я знаю, это использовать цветок, HTTP Celery API. С помощью flower вы можете создать задачу из всего, что может сделать HTTP-запрос. Один пример из Github Readme:
$ curl -X POST -d '{"args":[1,2]}' http://localhost:5555/api/task/async-apply/tasks.add

Таким образом, идея заключается в том, что ваше приложение на языке c ++ сделает HTTP-запрос к API-интерфейсу цветка, который затем вставит задачу в вашу очередь Redis.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector