python – 从龙卷风调用芹菜任务[复制]
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 从龙卷风调用芹菜任务[复制],小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2708字,纯文字阅读大概需要4分钟。
内容图文
![python – 从龙卷风调用芹菜任务[复制]](/upload/InfoBanner/zyjiaocheng/700/52bee4a7a3a3470480df1a65572f687b.jpg)
参见英文答案 > Tornado celery integration hacks 4个
有人如何从龙卷风中调用芹菜任务,并通过回调获得结果?
这个post声称有人必须简单地通过RabbitMQ发送消息然后执行该任务.这是有道理的,但是有人可以在python中给出一个例子(龙卷风更好,有回调)吗?就个人而言,我使用mongodb作为我的消息代理,但我也可以切换到Redis或RabbitMQ ..
编辑:为了澄清事情,我想要一个带回调的例子.例如,这个龙卷风代码
TestTask.delay(callback = self._on_celery_response)
...
def _on_celery_response(self, result):
print "hello from _on_celery_repsonse" , result
不起作用.我的TestTask是:
class TestTask(Task):
name = "tornadoServer.Test"
def run(self, callback=None, **kwargs):
result = {'result': "hello from celery task invoked by tornado"}
if callback is not None:
subtask(callback).delay(result)
return result
和追溯:
File "/home/hymloth/Desktop/DJANGO/NOO1/tornadoServer/tornado/stack_context.py", line 183, in wrapped
callback(*args, **kwargs)
File "/home/hymloth/Desktop/DJANGO/NOO1/tornadoServer/asyncmongo/connection.py", line 183, in _parse_response
callback(response)
File "/home/hymloth/Desktop/DJANGO/NOO1/tornadoServer/asyncmongo/cursor.py", line 399, in _handle_response
orig_callback(result['data'], error=None)
File "/home/hymloth/Desktop/DJANGO/NOO1/tornadoServer/basic_auth_handlers.py", line 66, in _on_response
celery_tasks.TestTask.delay(self._on_celery_response)
File "/usr/local/lib/python2.6/dist-packages/celery-2.2.7-py2.6.egg/celery/task/base.py", line 338, in delay
return self.apply_async(args, kwargs)
File "/usr/local/lib/python2.6/dist-packages/celery-2.2.7-py2.6.egg/celery/task/base.py", line 460, in apply_async
**options)
File "/usr/local/lib/python2.6/dist-packages/celery-2.2.7-py2.6.egg/celery/app/amqp.py", line 230, in delay_task
send(body, exchange=exchange, **extract_msg_options(kwargs))
File "/usr/local/lib/python2.6/dist-packages/kombu-1.1.6-py2.6.egg/kombu/compat.py", line 101, in send
return self.publish(*args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/kombu-1.1.6-py2.6.egg/kombu/messaging.py", line 124, in publish
compression, headers)
File "/usr/local/lib/python2.6/dist-packages/kombu-1.1.6-py2.6.egg/kombu/messaging.py", line 147, in _prepare
body) = encode(body, serializer=serializer)
File "/usr/local/lib/python2.6/dist-packages/kombu-1.1.6-py2.6.egg/kombu/serialization.py", line 119, in encode
payload = encoder(data)
File "/usr/lib/python2.6/copy_reg.py", line 70, in _reduce_ex
raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle instancemethod objects
没有回调任务正常工作..任何建议?
解决方法:
回调对象也应该是芹菜任务,否则你的代码不起作用.
如果您的回调函数不必是芹菜任务,则可以在任务主体内部使用信号.
http://docs.python.org/library/signal.html
内容总结
以上是互联网集市为您收集整理的python – 从龙卷风调用芹菜任务[复制]全部内容,希望文章能够帮你解决python – 从龙卷风调用芹菜任务[复制]所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。