首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何构建芹菜任务

如何构建芹菜任务
EN

Stack Overflow用户
提问于 2013-07-17 22:30:47
回答 2查看 13.4K关注 0票数 30

我有两种类型的任务:异步任务和计划任务。所以,下面是我的dir结构:

代码语言:javascript
复制
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

但是当我像下面这样运行芹菜工人时,它不工作。它不能接受来自芹菜节拍调度器的任务。

代码语言:javascript
复制
 $ celery worker --app=tasks -Q my_queue,default_queue

那么,对于多任务文件的组织有什么最佳实践吗?

EN

回答 2

Stack Overflow用户

发布于 2015-12-28 02:23:25

基于celery documentation,您可以像这样导入celery任务的结构:

例如,如果您有一个(想象中的)目录树,如下所示:

代码语言:javascript
复制
|
|-- foo
|    |-- __init__.py
|    |-- tasks.py
|
|-- bar
     |-- __init__.py
     |-- tasks.py

然后,调用app.autodiscover_tasks(['foo', bar'])将导致导入模块foo.tasks和bar.tasks。

票数 10
EN

Stack Overflow用户

发布于 2014-07-24 15:24:50

Celery任务可以是异步的、同步的,也可以根据它的调用进行调度

代码语言:javascript
复制
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调度程序

代码语言:javascript
复制
$ celery worker --app=tasks -B -Q my_queue,default_queue

因此,你组织任务的方式是个人的,它取决于你的项目复杂性,但我认为按照同步类型来组织它们不是最好的选择。

我已经在谷歌上搜索了这个主题,我还没有找到任何指南或建议,但我读到了一些根据功能来组织任务的案例。

我遵循了这个建议,因为在我的项目中,这不是一个模式。下面是我如何做到的一个例子

代码语言:javascript
复制
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                
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17702578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档