Есть ли альтернатива обратному отсчету сельдерея и 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 здесь:
Если я правильно понимаю ваш ответ на @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