The*_*Jug 5 python rabbitmq celery
我是Celery的新手,我一直在尝试设置一个简单的脚本来安排和取消安排任务.但是我觉得我遇到了一个奇怪的问题.我有以下设置
from celery import Celery
app = Celery('celery_test',
broker='amqp://',
backend='amqp')
@app.task
def add(x, y):
return x + y
Run Code Online (Sandbox Code Playgroud)
我启动我的芹菜服务器很好,可以添加任务.现在,当我想获得一系列活动任务时,事情似乎变得奇怪了.当我转到使用inspect获取计划任务列表时,它只运行一次,然后每次都返回None.
>>> i = app.control.inspect()
>>> print i.scheduled()
{u'celery@mymachine': []}
>>> print i.scheduled()
None
>>>
Run Code Online (Sandbox Code Playgroud)
无论是否添加任务,都会发生这种情况.我想找到一种方法来始终从我的芹菜队列中返回任务列表.我想这样做,所以我可以找到一个以前排队的任务,撤销它,并重新安排它.我觉得我在这里缺少一些基本的东西.
要重复调用以获取队列中的任务列表,您必须创建Celery对象的新实例.我试图弄清楚为什么通过调用执行调试代码./manage.py celery inspect scheduled而没有任何运气是必要的.也许有人会有更多的经验,并为这个答案添加一些额外的信息.
尝试使用此简单代码段来检查计划任务列表:
from celery import Celery
def inspect(method):
app = Celery('app', broker='amqp://')
return getattr(app.control.inspect(), method)()
print inspect('scheduled')
print inspect('active')
Run Code Online (Sandbox Code Playgroud)
小智 5
多亏了丹尼尔(Daniula),
我在django-celery-rabbitmq中使用此代码,我需要在检查后关闭应用程序实例……像这样:
from celery import Celery
def inspect(method):
app = Celery('app', broker='amqp://')
inspect_result = getattr(app.control.inspect(), method)()
app.close()
return inspect_result
print inspect('scheduled')
print inspect('active')
Run Code Online (Sandbox Code Playgroud)
在我的情况下,如果我不调用app.close()到rabbitmq的套接字连接仍处于活动状态(活动),则所有套接字描述符将被消耗,此后,新的套接字连接将不可用,因此一切都会停止工作。
| 归档时间: |
|
| 查看次数: |
1942 次 |
| 最近记录: |