在龙卷风请求处理程序中,如果我必须调用不影响返回给用户的函数的函数foo(),则首先将结果返回给用户,然后调用foo ()。是否有可能在龙卷风(或与第三方软件包)中轻松完成此操作?返回后请求处理程序中的龙卷风处理数据
回答
不,它不容易“开箱即用”。你所指的是“火和忘记”。即使你使用一个线程池去寻找请求,该线程池也将属于属于Tornado的主python进程。
最好的方法是消息队列。像胡萝卜一样。这样,假设你有一个用户可以执行的页面来开始生成一个巨大的报告,你可以在消息队列中启动它,然后完成Tornado请求以及一些AJAX魔术和其他技巧(超出Tornado范围),你可以坐下来等待消息队列完成它的工作(技术上可能发生在不同物理位置的分布式服务器上)。
ioloop.add_callback,Tornado将在下一次IOLoop迭代中执行回调。
不良建议警告:您可以使用多处理。
http://docs.python.org/library/multiprocessing.html
要小心,您关闭所有的数据库连接(在催生代码),做当它正常完成无子的请求任何其他龙卷风可能会做。其他答案听起来更好。但是,你可以做到这一点。不要这样做。
这是非常简单的:
class Handler(tornado.web.RequestHandler):
def get(self):
self.write('response')
self.finish() # Connection is now closed
foo()
这会阻止io循环吗? – raylu
是的,如果foo()阻止IO。不,如果foo()没有。 经验法则:如果foo()使用IOStream,那么它是非阻塞的。如果它使用没有IOStream的套接字,那么它将被阻塞。 –
- 1. 龙卷风请求处理程序
- 2. 龙卷风和异步请求处理
- 3. 重构龙卷风请求处理器
- 4. 龙卷风:在异步处理程序中阻止HTTP请求
- 5. Python龙卷风请求处理程序映射
- 6. 龙卷风请求处理程序覆盖头方法
- 7. 关闭龙卷风处理程序
- 8. 从处理程序龙卷风返回(self.write)对象
- 9. 龙卷风:静态处理
- 10. 用龙卷风处理stdin
- 11. 在另一个处理程序中调用龙卷风处理程序
- 12. 龙卷风处理程序中的多个self.write()命令
- 13. 龙卷风可以处理分页吗?
- 14. 如何批量处理龙卷风http_client.fetch
- 15. Python龙卷风处理器行为
- 16. jquery-Ajax调用龙卷风处理程序等待透明ajax调用返回
- 17. 处理程序在龙卷风中生成全局变量
- 18. 如何从控制台的龙卷风处理程序登录?
- 19. 龙卷风websocket处理程序未捕获的异常
- 20. 我在哪里可以缓存龙卷风请求处理程序中的熊猫数据帧
- 21. 龙卷风在处理处理程序时如何处理远程关闭连接?
- 22. 返回龙卷风
- 23. 完全处理openUrl请求后返回到源应用程序
- 24. websocket [龙卷风]的单个实例可以处理不同的请求吗?
- 25. 处理CXF请求的前/后处理
- 26. 的NodeJS请求处理程序不等待函数返回
- 27. 我如何在处理程序中对龙卷风处理程序进行基准测试?
- 28. 龙卷风请求超时
- 29. 龙卷风 - 如何在另一个函数中调用处理程序
- 30. 如何在龙卷风请求处理程序中访问我的url /路径的部分
这是非常容易的;我会添加一个答案。 –