гугл прошерстил, все варианты какие-то базовые и тестовые
У селери хорошая дока так-то.
дак никто и не спорит) для реализации каких-то совсем простеньких задач может её и достаточно меня интересует advanced уровень ;)
Ну тогда ещё читни kombu.
Я чёт не понял, где там реализовать слой DI
как я понял, через сигналы @app.task(bind=True, name='test_handler_name', max_retries=2, default_retry_delay=1) def test_handler(self: Task, service: str, kind, *args, **kwargs): print(service) @task_prerun.connect(sender=test_handler) def test_task_prerun(task_id: int, task: Task, *args, **kwargs): kwargs['kwargs'].update(dict(service='any service')) что-то типа такого
хм, а интересно
@worker_process_init.connect() def worker_init_config(**kwargs): if hasattr(current_app, "Session"): logger.info("App already has Session, skipping creation") return # workaround for threaded workers sharing single app current_app.Session = get_session_factory() current_app.s3config = get_s3_config() current_app.s3 = get_s3(current_app.s3config) я вот так делал, а дальше типа внутри таски уже всю логику
о, можно просто в аппку класть оказывается так вот и получается, что-то глобальное можно открывать в worker_process_init и закрывать в worker_process_shutdown (например коннект к БД) а какие-то сервисы собирать уже в task_prerun используя объекты из апки и сервисы прокидывать в таску
Обсуждают сегодня