Celery update_state 里面的 class 方法
Celery update_state inside class method
我是 celery 的新手,开始了解它是如何工作的。但是我在理解如何从 class 方法内部更新状态时遇到了一些麻烦。
views.py
@app.route('/',methods=['POST'])
def foo_bar():
task = foo_async.apply_async()
return json.dumps({}),202
background_task.py
@celery.task(bind=True)
def foo_async(self):
t = Test()
t.run()
return json.dumps({'progress':100})
test.py
class Test(Task):
def __init__(self):
self.foo = 'bar'
def run(self):
for i in range(0,10):
print 'Current : ',i
self.update_state(state='PROGRESS',meta={'current':i})
time.sleep(4)
但是我在发出请求后收到此错误:
[...] return task_id.replace('-','')
AttributeError: 'NoneType' object has no attribute 'replace'
所以我看到问题是关于 id 但我不知道如何解决它。
也许有更好的方法从我的方法内部获取更新?
当您调用 self.update_state()
时,您正在使用的 self
就是您的 class Test
。您需要在任务入口点提供给您的 self
上执行此操作,即函数 foo_async
.
的参数
您将 class Test
定义为 Task
的子 class 有什么原因吗?您已经有一个任务,由 celery.task
装饰器创建。
尝试以下操作:
@celery.task(bind=True)
def foo_async(self):
t = Test(self)
t.run()
return json.dumps({'progress':100})
class Test(object):
def __init__(self, task):
self.task = task
self.foo = 'bar'
def run(self):
for i in range(0,10):
print 'Current : ',i
self.task.update_state(state='PROGRESS',meta={'current':i})
time.sleep(4)
我是 celery 的新手,开始了解它是如何工作的。但是我在理解如何从 class 方法内部更新状态时遇到了一些麻烦。
views.py
@app.route('/',methods=['POST'])
def foo_bar():
task = foo_async.apply_async()
return json.dumps({}),202
background_task.py
@celery.task(bind=True)
def foo_async(self):
t = Test()
t.run()
return json.dumps({'progress':100})
test.py
class Test(Task):
def __init__(self):
self.foo = 'bar'
def run(self):
for i in range(0,10):
print 'Current : ',i
self.update_state(state='PROGRESS',meta={'current':i})
time.sleep(4)
但是我在发出请求后收到此错误:
[...] return task_id.replace('-','')
AttributeError: 'NoneType' object has no attribute 'replace'
所以我看到问题是关于 id 但我不知道如何解决它。
也许有更好的方法从我的方法内部获取更新?
当您调用 self.update_state()
时,您正在使用的 self
就是您的 class Test
。您需要在任务入口点提供给您的 self
上执行此操作,即函数 foo_async
.
您将 class Test
定义为 Task
的子 class 有什么原因吗?您已经有一个任务,由 celery.task
装饰器创建。
尝试以下操作:
@celery.task(bind=True)
def foo_async(self):
t = Test(self)
t.run()
return json.dumps({'progress':100})
class Test(object):
def __init__(self, task):
self.task = task
self.foo = 'bar'
def run(self):
for i in range(0,10):
print 'Current : ',i
self.task.update_state(state='PROGRESS',meta={'current':i})
time.sleep(4)