2014-10-29 61 views
0

我需要實現一個服務器,該服務器在單個事件循環內運行並服務WSGI應用程序(特別是在werkzeug中編寫的Web服務),並且同時,偶爾會調用一個可以控制服務器的特定功能(例如可以暫停或關閉服務器)。 (函數的主體並不重要,例如它可能只是檢查當前時間或另一個進程的狀態。)單個事件循環中的Python WSGI服務器+控制器

我可以想象在兩個單獨的進程中執行此操作並擁有專用的Web服務接口。儘管上述解決方案對我來說似乎更好。

你有什麼想法如何處理這個任務?

謝謝 的Jakub

+0

那麼兩個線程呢? – Daniel 2014-10-29 21:43:25

+0

我不確定線程​​是否會幫助太大。問題是(也許是事實上的基本問題)_如何與運行wsgi app_的事件循環進行通信,即在啓動主循環(例如,在werkzeug的run_simple,Twisted的reactor.run或gevent的serve_forever等之後)。 )。 – coobas 2014-10-30 13:32:37

回答

0

最後我想通了如何與扭曲的做到這一點。像

from twisted.web import server, resource 
from twisted.internet import reactor, endpoints 
from twisted.internet.task import LoopingCall 
from twisted.web.wsgi import WSGIResource 

lc = LoopingCall(server_controller) 
# run server_controller once a second 
lc.start(1.0) 
# serve a WSGI application 
resource = WSGIResource(reactor, reactor.getThreadPool(), application) 
site = server.Site(resource) 
reactor.listenTCP(8080, site) 
# enter into the even loop 
reactor.run()