【问题标题】:Print statement in Celery scheduled task doesn't appear in terminal芹菜计划任务中的打印语句未出现在终端中
【发布时间】:2015-07-14 18:26:53
【问题描述】:

当我运行celery -A tasks2.celery worker -B 时,我希望看到每秒打印一次“芹菜任务”。目前没有打印任何内容。为什么这不起作用?

from app import app
from celery import Celery
from datetime import timedelta

celery = Celery(app.name, broker='amqp://guest:@localhost/', backend='amqp://guest:@localhost/')
celery.conf.update(CELERY_TASK_RESULT_EXPIRES=3600,)

@celery.task
def add(x, y):
    print "celery task"
    return x + y

CELERYBEAT_SCHEDULE = {
    'add-every-30-seconds': {
        'task': 'tasks2.add',
        'schedule': timedelta(seconds=1),
        'args': (16, 16)
    },
}

这是盯着worker和beat后唯一的输出:

[tasks]
  . tasks2.add

[INFO/Beat] beat: Starting...
[INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672//
[INFO/MainProcess] mingle: searching for neighbors
[INFO/MainProcess] mingle: all alone

【问题讨论】:

    标签: python celery


    【解决方案1】:

    在 4.1.0 版本中,您必须将 logger 添加到您的 task.py 文件中,如下所示:

    from celery.utils.log import get_task_logger
    
    logger = get_task_logger(__name__)
    
    
    @task(name="multiply_two_numbers")
    def mul(x, y):
        total = x * (y * random.randint(3, 100))
        #HERE:
        logger.info('Adding {0} + {1}'.format(x, y))
        return total
    

    如果您想了解更多信息,请在此处的文档中说明: http://docs.celeryproject.org/en/latest/userguide/tasks.html

    【讨论】:

    • 工人会自动为你设置日志记录。
    【解决方案2】:

    您编写了时间表,但没有将其添加到 celery 配置中。所以beat看到没有要发送的预定任务。下面的示例使用celery.config_from_object(__name__) 从当前模块中获取配置值,但您也可以使用任何其他配置方法。

    正确配置后,您将看到来自 beat 的有关发送计划任务的消息,以及工作人员接收和运行这些任务时的输出。

    from celery import Celery
    from datetime import timedelta
    
    celery = Celery(__name__)
    celery.config_from_object(__name__)
    
    @celery.task
    def say_hello():
        print('Hello, World!')
    
    CELERYBEAT_SCHEDULE = {
        'every-second': {
            'task': 'example.say_hello',
            'schedule': timedelta(seconds=5),
        },
    }
    
    $ celery -A example.celery worker -B -l info
    
    [tasks]
      . example.say_hello
    
    [2015-07-15 08:23:54,350: INFO/Beat] beat: Starting...
    [2015-07-15 08:23:54,366: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672//
    [2015-07-15 08:23:54,377: INFO/MainProcess] mingle: searching for neighbors
    [2015-07-15 08:23:55,385: INFO/MainProcess] mingle: all alone
    [2015-07-15 08:23:55,411: WARNING/MainProcess] celery@netsec-ast-15 ready.
    [2015-07-15 08:23:59,471: INFO/Beat] Scheduler: Sending due task every-second (example.say_hello)
    [2015-07-15 08:23:59,481: INFO/MainProcess] Received task: example.say_hello[2a9d31cb-fe11-47c8-9aa2-51690d47c007]
    [2015-07-15 08:23:59,483: WARNING/Worker-3] Hello, World!
    [2015-07-15 08:23:59,484: INFO/MainProcess] Task example.say_hello[2a9d31cb-fe11-47c8-9aa2-51690d47c007] succeeded in 0.0012782540870830417s: None
    

    【讨论】:

      【解决方案3】:

      确保为计划任务运行 celery beat worker:

      celery beat --app app.celery
      

      在此处查看文档:http://celery.readthedocs.org/en/latest/userguide/periodic-tasks.html#starting-the-scheduler

      【讨论】:

      • 我跑了,没有运气
      猜你喜欢
      • 1970-01-01
      • 2015-09-28
      • 2016-02-21
      • 1970-01-01
      • 2018-01-25
      • 2015-05-25
      • 2017-08-28
      • 2021-10-12
      • 2019-12-09
      相关资源
      最近更新 更多