Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Celerybeat执行任务_Python_Celery - Fatal编程技术网

Python Celerybeat执行任务

Python Celerybeat执行任务,python,celery,Python,Celery,我有芹菜任务: @app.task(ignore_result=True) def update_task(): .... 我在设置中将此任务添加到celerybeat: CELERYBEAT_SCHEDULE = { "update-task-on-mathmod.org": { "task": "manager.update_task", "schedule": timedelta(seconds=30), } } 我的项目结构:

我有芹菜任务:

@app.task(ignore_result=True)
def update_task():
    ....
我在设置中将此任务添加到celerybeat:

CELERYBEAT_SCHEDULE = {
    "update-task-on-mathmod.org": {
        "task": "manager.update_task",
        "schedule": timedelta(seconds=30),
    }
}
我的项目结构:

设置在
settings.py
中,任务定义在
application.py
中。如何开始定期任务

我运行芹菜节拍-A应用程序。输出:

celery beat v3.1.18 (Cipater) is starting.
__    -    ... __   -        _
Configuration ->
    . broker -> amqp://guest:**@localhost:5672//
    . loader -> celery.loaders.app.AppLoader
    . scheduler -> celery.beat.PersistentScheduler
    . db -> celerybeat-schedule
    . logfile -> [stderr]@%DEBUG
    . maxinterval -> now (0s)
[2015-07-30 11:27:16,470: DEBUG/MainProcess] Setting default socket timeout to 30
[2015-07-30 11:27:16,470: INFO/MainProcess] beat: Starting...
[2015-07-30 11:27:16,482: DEBUG/MainProcess] Current schedule:
<Entry: celery.backend_cleanup celery.backend_cleanup() <crontab: 0 4 * * * (m/h/d/dM/MY)>
[2015-07-30 11:27:16,483: DEBUG/MainProcess] beat: Ticking with max interval->5.00 minutes
[2015-07-30 11:27:16,495: DEBUG/MainProcess] Start from server, version: 0.9, properties: {u'information': u'Licensed under the MPL.  See http://www.rabbitmq.com/', u'product': u'RabbitMQ', u'copyright': u'Copyright (C) 2007-2013 GoPivotal, Inc.', u'capabilities': {u'exchange_exchange_bindings': True, u'connection.blocked': True, u'authentication_failure_close': True, u'basic.nack': True, u'consumer_priorities': True, u'consumer_cancel_notify': True, u'publisher_confirms': True}, u'platform': u'Erlang/OTP', u'version': u'3.2.4'}, mechanisms: [u'AMQPLAIN', u'PLAIN'], locales: [u'en_US']
[2015-07-30 11:27:16,497: DEBUG/MainProcess] Open OK!
[2015-07-30 11:27:16,498: DEBUG/MainProcess] beat: Waking up in 5.00 minutes
芹菜节拍3.1.18版(Cipater)即将开始。
__    -    ... __   -        _
配置->
. 经纪人->amqp://guest:**@本地主机:5672//
. 加载器->芹菜.loaders.app.AppLoader
. 调度器->芹菜.beat.PersistentScheduler
. db->celerybeat时间表
. 日志文件->[stderr]@%DEBUG
. 最大间隔->现在(0s)
[2015-07-30 11:27:16470:DEBUG/MainProcess]将默认套接字超时设置为30
[2015-07-30 11:27:16470:INFO/MainProcess]节拍:开始。。。
[2015-07-30 11:27:16482:调试/主进程]当前计划:
5.00分钟
[2015-07-30 11:27:16495:DEBUG/MainProcess]从服务器启动,版本:0.9,属性:{u'information':u'根据MPL授权。请参阅http://www.rabbitmq.com/“产品”:u'RabbitMQ',u'copyright”:u'copyright(C)2007-2013 GoPivotal,Inc.,u'capabilities':{u'exchange\u exchange\u bindings':True,u'connection.blocked':True,u'authentication\u failure\u close':True,u'basic.nack':True,u'consumer\u priorities':True,u'publisher\u confirm':True},u'PLAIN',u'PLAIN机制:[u'AMQPLAIN',u'PLAIN',u'PLAIN',locales:[u'en\u'US']
[2015-07-30 11:27:16497:调试/主进程]打开OK!
[2015-07-30 11:27:16498:调试/主进程]节拍:5分钟后醒来
为了处理“预定”任务,您需要运行“芹菜节拍” 正如@user2097159所说

celery -A <project> beat -l debug
芹菜-节拍-l调试
要为正常任务(异步执行的任务)运行辅助进程,需要启动辅助进程

celery -A <project> worker -l debug
芹菜-工人-调试
-l表示日志级别等于调试,有利于开发。 一个好的做法是留下芹菜来设置任务名称,而不是set name=“something”。 当worker运行时,它将显示一条消息,其中包含已注册的任务,请确保您的任务已由芹菜注册。
一旦您的任务被发送到worker或the beat,您将在其控制台中看到一个日志条目。

像运行workers一样运行celerybeat。@user2097159您是说
芹菜-应用程序工作者
?有点像
芹菜节拍-一个应用程序
@user2097159它这么重要吗?很好,您已经找到了。它看起来您为任务使用了“错误”的名称。任务的管理器应该是“manager.applications.update\u task”而不是“manager.update\u task”。您可以通过输入django shell导入任务并检查名称属性来确认这一点。
来自manager.application import update_task
然后执行此操作
打印更新_task.name