Есть ли альтернатива обратному отсчету сельдерея и eta в фреймворке Faust (или другом фреймворке)?

Я хочу запускать некоторые задачи в определенное время в соответствии с настройками пользователя. Например, если пользователь установил 4:00 PM, я бы запустил задачу в 16:00. Это можно было бы обработать в Celery с обратным отсчетом и eta. Но мой брокер предпочитает Кафку. Есть ли альтернатива обратному отсчету сельдерея и ете?

Код в сельдерее ниже:

result = add.apply_async((2, 2), countdown=3)

Я ожидаю, что не буду использовать сельдерей, а должен использовать Kafka

2 ответа

У Faust есть триггер crontab для запуска процессов. В приведенном ниже примере показана упрощенная реализация с использованием crontab, который будет запускать задания каждую минуту:

import faust
import asyncio

app = faust.App(
        'some_print_step',
        broker="kafka://localhost:9092",
    )

@app.crontab("* * * * *")
async def run_every_min():
    print("This process will be triggered every minute.")


@app.crontab('0 18 * * *')
async def run_everyday_at_6pm:
    print('This process will be triggered every day at 6pm.')

Вы можете найти дополнительную документацию по crontab здесь:

Документация Faust crontab и таймер

Если я правильно понимаю ваш ответ на @meherrr, возможно, это выход. используя asyncio.sleep() и передавая время задержки с сообщением, можно добиться такого же поведения, как описано здесь: https://docs.celeryproject.org/en/latest/userguide/calling.html

Но это не похоже на встроенную функцию.

@app.agent(some_topic, concurrency=100)
async def do_something_later(things_to_do):
    async for thing in things_to_do:
        delay_by = thing.time_to_wait
        await asyncio.sleep(delay_by)
        result = do_the_thing_to_the(thing)
        yield result
Другие вопросы по тегам