Каков рекомендуемый способ запуска встроенного веб-сервера в настольном приложении (скажем, wsgi-сервер с pyqt)
Настольное приложение должно запускать веб-сервер при запуске и закрывать его при закрытии.
Предполагая, что рабочий стол - единственный клиент, которому разрешено подключаться к веб-серверу, как лучше написать это?
И веб-сервер, и рабочий стол работают по своему усмотрению. Итак, я должен использовать потоки или многопроцессорность?
3 ответа
Используйте что-то вроде CherryPy или paste.httpserver. Вы можете использовать сервер wsgiref, и он обычно работает нормально локально, но если вы используете Ajax, однопоточная природа wsgiref может привести к некоторым странным результатам, или если вы когда-либо сделаете подзапрос, вы получите условие гонки. Но в большинстве случаев это будет хорошо. Для вас может быть полезно не иметь встроенный многопоточный сервер (и CherryPy, и paste.httpserver являются многопоточными), и в этом случае wsgiref будет полезен (все запросы будут выполняться из одного потока).
Обратите внимание, что если вы используете CherryPy или paste.httpserver, все запросы будут автоматически выполняться в подпотоках (эти пакеты создают поток для вас), и вы, вероятно, не сможете напрямую касаться кода GUI из вашего веб-кода (так как код GUI обычно не любит, когда его обрабатывают темы). Для любого из них код сервера блокируется, поэтому вам нужно создать поток, чтобы запустить сервер. Twisted может работать в вашем обычном цикле обработки событий GUI, но, если это не важно, это добавляет много сложности.
Не используйте BaseHTTPServer или SimpleHTTPServer, они глупы и сложны, и во всех случаях, когда вы можете их использовать, вам следует вместо этого использовать wsgiref. Каждый случай, как у wsgiref, имеет вменяемый API (WSGI), в то время как у этих серверов есть глупые API.
Посмотрите на пакет BaseHTTPServer или, что еще лучше, SimpleHTTPServer. Довольно простой и удобный в использовании.