Каков рекомендуемый способ запуска встроенного веб-сервера в настольном приложении (скажем, wsgi-сервер с pyqt) - PullRequest
6 голосов
/ 09 июня 2010

Настольное приложение должно запускать веб-сервер при запуске и закрывать его при закрытии.

Предполагая, что рабочий стол - единственный клиент, которому разрешено подключаться к веб-серверу, как лучше написать это?

И веб-сервер, и рабочий стол работают в цикле блокировкиих собственный.Итак, я должен использовать потоки или многопроцессорность?

Ответы [ 3 ]

6 голосов
/ 09 июня 2010

Используйте что-то вроде CherryPy или paste.httpserver. Вы можете использовать сервер wsgiref, и он обычно работает хорошо локально, но если вы используете Ajax, однопоточная природа wsgiref может привести к некоторым странным результатам, или если вы когда-либо сделаете подзапрос, вы получите условие гонки. Но в большинстве случаев это будет хорошо. может быть полезно, чтобы у вас не было встроенного многопоточного сервера (и CherryPy, и paste.httpserver являются многопоточными), в этом случае wsgiref будет полезен (все запросы будут выполняться из одного потока).

Обратите внимание, что если вы используете CherryPy или paste.httpserver, все запросы будут автоматически выполняться в подпотоках (эти пакеты создают поток для вас), и вы, вероятно, не сможете напрямую касаться кода GUI из своего веб-кода (так как Код GUI обычно не любит обрабатываться потоками). Для любого из них код сервера блокируется, поэтому вам нужно создать поток, чтобы запустить сервер. Twisted может работать в вашем обычном цикле обработки событий GUI, но, если это не важно, это добавляет много сложности.

Не используйте BaseHTTPServer или SimpleHTTPServer, они глупы и сложны, и во всех случаях, когда вы можете их использовать, вам следует вместо этого использовать wsgiref. В каждом отдельном случае, как и у wsgiref, есть вменяемый API (WSGI), а у этих серверов - глупые API.

1 голос
/ 09 июня 2010

В Соус RC , мы используем CherryPy .Так как это чистый Python, его очень легко встроить (как источник на диск или в zip-файл).

1 голос
/ 09 июня 2010

Посмотрите на пакет BaseHTTPServer , а еще лучше SimpleHTTPServer Довольно простой и удобный в использовании.

...