建议在台式机应用程序中运行嵌入式Web服务器的方法(例如带有pyqt的wsgi服务器)

问题描述 投票:6回答:3

桌面应用程序应在启动时启动Web服务器,并在关闭时将其关闭。

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

Web服务器和台式机均以各自的阻塞循环运行。因此,我应该使用线程还是多处理?

python user-interface desktop pyqt wsgi
3个回答
6
投票

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

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

不要使用BaseHTTPServer或SimpleHTTPServer,它们很愚蠢而复杂,在all情况下,您可能会使用,而应该使用wsgiref。对于wsgiref而言,每一种情况都具有健全的API(WSGI),而这些服务器具有愚蠢的API。


1
投票

Sauce RC中,我们使用CherryPy。由于它是纯Python,因此很容易将其嵌入(作为源在磁盘上或zip文件中)。


0
投票

看看BaseHTTPServer软件包,或者更好的SimpleHTTPServer。非常简单易用。

© www.soinside.com 2019 - 2024. All rights reserved.