python-Celery任务消失-Django / Celery
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-Celery任务消失-Django / Celery,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1444字,纯文字阅读大概需要3分钟。
内容图文
![python-Celery任务消失-Django / Celery](/upload/InfoBanner/zyjiaocheng/672/8d024553aa9249ebaac2a686ecf1b386.jpg)
这是我的代码:
我的任务
from celery.decorators import task
@task()
def add(x, y):
return x + y
使用我的任务
from core.tasks import add
results = []
for i in range(100):
results.append(add.delay(i, i))
问题1
几秒钟后,我将执行以下操作:
for result in results:
print result.result
打印此:
(这些值不会以看起来像模式的形式返回)
None
None
None
None
8
None
None
None
None
18
None
None
None
None
28
None
None
None
None
38
...
第二个干净的操作系统安装设置:
一切都按预期进行,但仍不确定这里发生了什么…
Django管理界面中的任务也随机丢失…
有人知道发生了什么吗? :|
解决方法:
task.delay()是异步的.顺便说一句,整个AMQP都是关于使任务异步的.如果您想要同步行为,那么使用芹菜有什么意义?
from celery.decorators import task
@task()
def add(x, y, results):
results.append(x + y)
------------8<-------------
from core.tasks import add
results = []
for i in range(100):
add.delay(i, i, results)
请等待几秒钟,然后再进行打印(在消费者进行工作时),并注意结果可能会出问题.
方法task.delay将返回celery.result.AsyncResult实例.在使用AsyncResult.result之前,应检查AsyncResult.state == SUCCESS.
您的最终打印循环可能是:
for result in results:
while not result.state.ready():
time.sleep(secs)
if result.state == u'SUCCESS':
print result.result
else:
print "Something Rotten in the State of Denmark..."
(几乎)与以下内容相同:
for result in results:
print result.get()
看一下TaskSets,它们比将结果存储在列表中更好.
在实践中,人们将结果存储在数据库中,并将等待循环放置在客户端中,然后每隔几秒钟通过AJAX锤击服务器直到完成.
内容总结
以上是互联网集市为您收集整理的python-Celery任务消失-Django / Celery全部内容,希望文章能够帮你解决python-Celery任务消失-Django / Celery所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。