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

发布于 2024-09-05 00:29:26 字数 133 浏览 4 评论 0 原文

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

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

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

The desktop app should start the web server on launch and should shut it down on close.

Assuming that the desktop is the only client allowed to connect to the web server, what is the best way to write this?

Both the web server and the desktop run in a blocking loop of their own. So, should I be using threads or multiprocessing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

り繁华旳梦境 2024-09-12 00:29:26

使用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。

Use something like CherryPy or paste.httpserver. You can use wsgiref's server, and it generally works okay locally, but if you are doing Ajax the single-threaded nature of wsgiref can cause some odd results, or if you ever do a subrequest you'll get a race condition. But for most cases it'll be fine. It might be useful to you not to have an embedded threaded server (both CherryPy and paste.httpserver are threaded), in which case wsgiref would be helpful (all requests will run from the same thread).

Note that if you use CherryPy or paste.httpserver all requests will automatically happen in subthreads (those packages do the thread spawning for you), and you probably will not be able to directly touch the GUI code from your web code (since GUI code usually doesn't like to be handled by threads). For any of them the server code blocks, so you need to spawn a thread to start the server in. Twisted can run in your normal GUI event loop, but unless that's important it adds a lot of complexity.

Do not use BaseHTTPServer or SimpleHTTPServer, they are silly and complicated and in all cases where you might use then you should use wsgiref instead. Every single case, as wsgiref is has a sane API (WSGI) while these servers have silly APIs.

美男兮 2024-09-12 00:29:26

查看 BaseHTTPServer 包,或者更好的是 SimpleHTTPServer。非常简单且易于使用。

Have a look at the BaseHTTPServer package, or better yet the SimpleHTTPServer. Pretty simple and easy to use.

深爱成瘾 2024-09-12 00:29:26

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

In Sauce RC, we use CherryPy. Since it's pure Python, it's very easy to embed it (as source on disk or in a zip file).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文