主名称:Main Name
其中主模块的名称是比较重要的。 使用 Celery 进行发送任务消息时,消息内容不会含有源代码信息,只有执行任务的名称。这与主机名在互联网上的工作类似:每一个职程(Worker)通过任务名称与实际的功能进行对应,这样的方式被称为 任务注册 。 每当定义任务时,该任务也将添加到本地注册表中:
1
>>> @app.task
2
... def add(x, y):
3
... return x + y
4
5
>>> add
6
<@task: __main__.add>
7
8
>>> add.name
9
__main__.add
10
11
>>> app.tasks['__main__.add']
12
<@task: __main__.add>
Copied!
在上面的实例中 __main__再次出现,这是因为 Celery 无法检测到该函数属于哪个模块时,自动会使用主模块的名称作为任务名称的开头。 这只是一组有限实例中的问题:
  • 如果在其中定义任务的模块作为程序运行。
  • 如果应用程序是在python shell(repl)中创建的。
例如,这里的 tasks 模块还用于用 app.worker_main() 启动一个职程(Worker):
tasks.py
tasks.py
1
from celery import Celery
2
app = Celery()
3
4
@app.task
5
def add(x, y): return x + y
6
7
if __name__ == '__main__':
8
app.worker_main()
Copied!
当模块执行时,任务名以 __main__ 开头,被另外一个模块导入时,例如调用一个任务时,任务的名称将以 tasks (模块真实的名称)进行开头命名:
1
>>> from tasks import add
2
>>> add.name
3
tasks.add
Copied!
也可以设置主模块的名称:
1
>>> app = Celery('tasks')
2
>>> app.main
3
'tasks'
4
5
>>> @app.task
6
... def add(x, y):
7
... return x + y
8
9
>>> add.name
10
tasks.add
Copied!

See one see (可以看一看)

任务:Tasks 章节中 Names。
Export as PDF
Copy link