非阻塞django? [关闭]
Posted
技术标签:
【中文标题】非阻塞django? [关闭]【英文标题】:Nonblocking django? [closed] 【发布时间】:2014-02-17 04:39:30 【问题描述】:在工作中,我不允许将 perl 用于 Web 服务。但是允许使用 Python。
我需要做的是提供一些非常慢的 c++ 二进制文件的结果。每个 exe 最多需要 20 秒才能运行。在 perl 中,我只使用 mojolicious 的非阻塞事件循环(这里给出了一个 example.of。http://blogs.perl.org/users/joel_berger/2014/01/writing-non-blocking-applications-with-mojolicious-part-3.html)
如何使用 django 和 python 来做这件事?
【问题讨论】:
Django 更多的是关于网络应用程序,而不是服务器。您可以使用内置的 python 模块socket
,它非常简单和低级,或者下面的答案中列出的任何反应器框架(通常更强大,但可能有点矫枉过正,具体取决于您的内容)正在寻找)
您真正需要的是AnyEvent::Util 的fork_call 的端口(因为我一直在使用Mojo::IOLoop::ForkCall 构建自己)并将其集成到一些python 事件循环中。再说一次,你可以说服你的$work
让你使用正确的工具来完成这项工作:-)
【参考方案1】:
Tornado 使用非阻塞 IO,概念与 perl 或 node js 事件循环,每个线程多个任务等概念相同。
【讨论】:
【参考方案2】:可能在 Django 中是不可能的,因为整个框架需要专门为在事件循环中运行而构建。在事件驱动的框架中,慢操作(例如 I/O)需要使用回调来实现,以便实际的 I/O 可以卸载到事件循环本身,并且只有在操作完成时才调用回调; Django 不是这样实现的。
看看Twisted——它是一个事件驱动的 Python 网络引擎,在它之上还构建了一些 Web 应用程序框架。
【讨论】:
【参考方案3】:看看A clean, lightweight alternative to Python's twisted。我会选择 gevent 作为 Web 应用程序,因为它与 uWSGI 一起运行——这是运行 Python 代码的最通用的 Web 服务器。
【讨论】:
以上是关于非阻塞django? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章