Celery - 打印消息被打印两次到控制台

问题描述 投票:0回答:1

这是定义 celery 应用程序的文件:

from celery import Celery

from constants import TASKS_FILE_NAMES

celery_app = Celery('tasks', backend='rpc://', broker='pyamqp://guest@localhost//')

for filename in TASKS_FILE_NAMES:
    print(filename)
    celery_app.autodiscover_tasks(['units'], related_name=filename[:-3], force=True)

并且同一个包中有constants.py:

import os

TASKS_DIR = os.path.join(os.getcwd(), "units")
TASKS_FILE_NAMES = [file for file in os.listdir(TASKS_DIR) if os.path.isfile(os.path.join(TASKS_DIR, file)) and file != '__init__.py']

我在该包内还有

/units
文件夹,其中包含任务所在的文件。

当我使用

celery --app celeryapp worker --loglevel=INFO
命令运行 celery 时,文件名会打印两次。事实上,我尝试过的所有内容都被打印了两次,就好像文件被执行了两次一样。什么会导致这种行为?

python celery
1个回答
0
投票

这是因为当您导入某些内容时,整个代码都会被执行。

import os
if __name__ == '__main__':
   TASKS_DIR = os.path.join(os.getcwd(), "units")
   TASKS_FILE_NAMES = [file for file in os.listdir(TASKS_DIR) if os.path.isfile(os.path.join(TASKS_DIR, file)) and file != '__init__.py']

试试这个,它检查调用脚本是否是主脚本(主要指的是脚本本身)。如果直接执行代码,它就是main。如果被其他脚本导入并调用,它会改变

© www.soinside.com 2019 - 2024. All rights reserved.