在芹菜任务中设置while循环

时间:2016-05-18 23:17:48

标签: python django flask celery

我想在我的网络服务器上的后台持续进行一个while循环。我仍然希望有可能使用烧瓶给我的芹菜工人打开和关闭循环。芹菜中的while循环似乎只运行一次。

from celery import Celery    
@app.task
    def count(i):
        if i == 1:  # turn on command
            while True:  # a while loop to achieve what I want to do
                i = i+1
                return i
        elif i == 0: # turn off command given by flask
            return i

我也尝试过celery_beat,但这需要我提前提供参数而不是接受来自其他来源的命令。

app.conf.update(
CELERYBEAT_SCHEDULE = {
    'add-every-1-seconds': {
        'task': 'tasks.count',
        'schedule': timedelta(seconds=1),
        #'args': (1)
    },
})

1 个答案:

答案 0 :(得分:0)

感谢@ dim的回答。我现在的代码是:

@app.task
def count(i):
    if i == 1:
        while True:  # a while loop to achieve what I want to do
            i = i+1
            time.sleep(1)
            print i
            print 'i am counting'

启动工人:

$ celery -A tasks worker -l info

从python中调用它

>> from tasks import count
>> result = count(1)

从python

停止循环
>> result.revoke(terminate=True)

希望这对想要在芹菜任务中循环的人有用。