2014-01-26 81 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事件循環中的相同,每個線程有多個任務等等。