2014-01-26 230 views
9

在工作中,我不允许使用perl进行Web服务。但是Python是允许的。非阻塞django?

我需要做的是提供一些非常慢的C++二进制文件的结果。每个exe需要长达20秒才能运行。在Perl中,我只是使用mojolicious的非阻塞事件循环(这里给出了一个例子。http://blogs.perl.org/users/joel_berger/2014/01/writing-non-blocking-applications-with-mojolicious-part-3.html

如何用django和python来做这件事?

+1

Django更多的是关于网络应用程序,而不是服务器。您可以使用内置的python模块['socket'](http://docs.python.org/2/library/socket.html),它非常简单且低级,或者列出的任何反应器框架在下面的答案(这通常更强大,但可能是矫枉过正,取决于你在找什么) – yuvi

+1

你真正需要的是[AnyEvent :: Util]的端口(http://metacpan.org/module/AnyEvent :: Util)的fork_call(因为我一直在用[Mojo :: IOLoop :: ForkCall](http://metacpan.org/module/Mojo::IOLoop::ForkCall)构建自己并将其集成到一些python事件循环。然后再说一遍,你可以说出你的'$ work',让你使用正确的工具:-) –

回答

3

可能将不可能与Django一样,因为整个框架需要专门为在事件循环内部运行而构建。在一个事件驱动的框架中,慢操作(例如I/O)需要使用回调来实现,以便实际的I/O可以被卸载到事件循环本身,并且回调仅在操作完成时调用; Django没有这样实现。

看看Twisted - 它是一个事件驱动的Python网络引擎,它也有一些基于它构建的Web应用程序框架。

5

Tornado使用非阻塞IO,概念与perl或节点js事件循环中的相同,每个线程有多个任务等等。