0
语境:芹菜链任务
tasks.py
def chunkify(lst,n):
return [ lst[i::n] for i in xrange(n) ]
@task
def swarm_restart(procs):
chunks = chunkify(procs, 4)
res = chain(
group_restart.s(([ (proc.name, proc.host.name) for proc in chunks[0] ])),
group_restart.s(([ (proc.name, proc.host.name) for proc in chunks[1] ])),
group_restart.s(([ (proc.name, proc.host.name) for proc in chunks[2] ])),
group_restart.s(([ (proc.name, proc.host.name) for proc in chunks[3] ])),
)()
@ task
def group_restart(procs):
# this task runs only once, seems to be called just 1 time
res = group(proc_restart.s(proc[0], proc[1]) for proc in procs).apply_async()
@ task
def proc_restart(proc_name, hostname):
# This method works, tested several times
proc = Host.objects.get(name=hostname).get_proc(proc_name)
proc.restart()
views.py
def call():
procs = get_procs()
tasks.swarm_restart.delay(procs)
我得到的错误: TypeError: group_restart() takes exactly 1 argument (2 given)
我做错了什么,任何灯光?
顺便说一句。芹菜== 3.0.25,django-celery == 3.0.23
你可以用'task.si()'替换你的'task.s()',这使得签名不可变,一切工作正常,与当前的工作流本身。 – ChillarAnand 2014-10-11 14:04:03