什么是在桌面应用程序中运行嵌入式Web服务器的推荐方法(比如使用pyqt的wsgi服务器)

btb*_*tes 6 python user-interface desktop wsgi pyqt

桌面应用程序应在启动时启动Web服务器,并应在关闭时关闭它.

假设桌面是唯一允许连接到Web服务器的客户端,那么最好的方法是什么?

Web服务器和桌面都在自己的阻塞循环中运行.那么,我应该使用线程还是多处理?

Ian*_*ing 6

使用像CherryPy或paste.httpserver这样的东西.您可以使用wsgiref的服务器,它通常在本地工作正常,但如果您正在使用Ajax,wsgiref的单线程特性可能会导致一些奇怪的结果,或者如果您执行子请求,您将获得竞争条件.但对于大多数情况,它会没事的.你可能没有嵌入式线程服务器(CherryPy和paste.httpserver都是线程化的)很有用,在这种情况下,wsgiref会有所帮助(所有请求都将从同一个线程运行).

请注意,如果您使用CherryPy或paste.httpserver,所有请求将自动发生在子线程中(这些包为您生成线程),您可能无法直接从Web代码触摸GUI代码(因为GUI代码通常不喜欢被线程处理).对于其中任何一个服务器代码块,所以你需要产生一个线程来启动服务器.Twisted可以在你的普通GUI事件循环中运行,但除非这很重要,否则会增加很多复杂性.

不要使用BaseHTTPServer或SimpleHTTPServer,它们是愚蠢和复杂的,在你可能使用的所有情况下,你应该使用wsgiref.每个案例,因为wsgiref有一个理智的API(WSGI),而这些服务器有愚蠢的API.