独行侠

Hi,外星人

  • 主页
所有文章 关于我

独行侠

Hi,外星人

  • 主页

Celery4.1 中文文档

2019-08-01

Application(应用)

Celery 库在使用之前必须初始化,一个celery实例被称为一个应用(或者缩写 app)。

Celery 应用是线程安全的,所以多个不同配置、不同组件、不同任务的 应用可以在一个进程空间里共存。
下面创建一个 celery 应用:

1
2
3
4
>>> from celery import Celery
>>> app = Celery()
>>> app
<Celery __main__:0x100469fd0>

最后一行显示的是 celery 应用的文本表示: 包含应用类的名称(Celery),当前主模块的名称(main),以及应用对象的内存地址(0x100469fd0)。

Main Name

上述文本表示中只有一部分是重要的,那就是主模块名称。下面分析下它为何重要。

当你发送一个消息给 Celery,消息中不会包含任何源码,而只有你想要执行的任务的名称。这就好像因特网上的域名映射原理一般:每个执行单元维护着一个任务名称到实际任务函数的映射,这个映射被称为任务注册表。

1
2
3
4
5
6
7
8
9
10
11
12
>>> @app.task
... def add(x, y):
... return x + y

>>> add
<@task: __main__.add>

>>> add.name
__main__.add

>>> app.tasks['__main__.add']
<@task: __main__.add>

现在,你又看到显示 main 模块名称;当Celery不能探查到这个任务函数属于哪个模块时,它将使用主模块名称来产生任务名称的前缀。

这在有些情况下会产生问题:

  1. 定义任务的主模块作为一个程序运行。
  2. 应用在python交互终端创建。

例如下面程序,定义任务的模块还调用 app.worker_main() 来启动一个工作单元:
task.py

1
2
3
4
5
6
7
8
from celery import Celery
app = Celery()

@app.task
def add(x, y): return x + y

if __name__ == '__main__':
app.worker_main()

当这个模块运行,任务将以前缀__main__ 命名,但是当该模块被其他进程引入来运行一个任务,这个任务的名称将以前缀 tasks 命名(即这个模块的真实名称)。

1
2
3
>>> from tasks import add
>>> add.name
tasks.add

你可以给主模块声明另外一个名称

1
2
3
4
5
6
7
8
9
10
>>> app = Celery('tasks')
>>> app.main
'tasks'

>>> @app.task
... def add(x, y):
... return x + y

>>> add.name
tasks.add

具体可以查看名称这节

  • python
  • Celery

扫一扫,分享到微信

微信分享二维码
实用python工具包锦集
Gevent 简明教程
© 2019 独行侠
苦难终会过去,坚强之人永存… by独行侠
  • 所有文章
  • 关于我

tag:

  • python
  • apscheduler
  • 定时任务
  • Express
  • 基础教程
  • ZMQ
  • PyZMQ
  • 可靠性
  • 请求应答模式
  • 观察者模式
  • Gevent
  • 异步编程
  • django
  • django-restFramework
  • 第三方工具包
  • ZeroMQ
  • Celery
  • 动态路由
  • vue
  • axios
  • js
  • hexo
  • github

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

我们都已长大,而青春永不结局