我有两种类型的任务:异步任务和计划任务。所以,下面是我的dir结构:
proj
|
-- tasks
|
-- __init__.py
|
-- celeryapp.py => celery instance defined in this file.
|
-- celeryconfig.py
|
-- async
| |
| -- __init__.py
| |
| -- task1.py => from proj.tasks.celeryapp import celery
| |
| -- task2.py => from proj.tasks.celeryapp import celery
|
-- schedule
|
-- __init__.py
|
-- task1.py => from proj.tasks.celeryapp import celery
|
-- task2.py => from proj.tasks.celeryapp import celery
但是当我像下面这样运行芹菜工人时,它不工作。它不能接受来自芹菜节拍调度器的任务。
$ celery worker --app=tasks -Q my_queue,default_queue
那么,对于多任务文件的组织有什么最佳实践吗?
发布于 2015-12-28 02:23:25
基于celery documentation,您可以像这样导入celery任务的结构:
例如,如果您有一个(想象中的)目录树,如下所示:
|
|-- foo
| |-- __init__.py
| |-- tasks.py
|
|-- bar
|-- __init__.py
|-- tasks.py
然后,调用app.autodiscover_tasks(['foo', bar'])
将导致导入模块foo.tasks和bar.tasks。
发布于 2014-07-24 15:24:50
Celery任务可以是异步的、同步的,也可以根据它的调用进行调度
task.delay(arg1,arg2) #will be async
task.delay(arg1,arg2).get() #will be sync
task.delay(arg1,arg2).get() #will be sync
task.apply_async(args = [arg1,arg2], {'countdown' : some_seconds}) #async with delay
根据您的需要,有很多调用
但是,您必须使用-B标志启动celery才能启用celery调度程序
$ celery worker --app=tasks -B -Q my_queue,default_queue
因此,你组织任务的方式是个人的,它取决于你的项目复杂性,但我认为按照同步类型来组织它们不是最好的选择。
我已经在谷歌上搜索了这个主题,我还没有找到任何指南或建议,但我读到了一些根据功能来组织任务的案例。
我遵循了这个建议,因为在我的项目中,这不是一个模式。下面是我如何做到的一个例子
your_app
|
-- reports
|
-- __init__.py
-- foo_report.py
-- bar_report.py
-- tasks
|
-- __init__.py
-- report_task.py
-- maintenance
|
-- __init__.py
-- tasks
|
-- __init__.py
-- delete_old_stuff_task.py
-- twitter
|
-- __init__.py
-- tasks
|
-- __init__.py
-- batch_timeline.py
https://stackoverflow.com/questions/17702578
复制相似问题