BasicHTTPServer, SimpleHTTPServer и параллелизм - PullRequest
4 голосов
/ 16 марта 2010

Я пишу небольшой веб-сервер для тестирования с использованием python, BasicHTTPServer и SimpleHTTPServer. Похоже, он обрабатывает один запрос за раз. Есть ли способ сделать это немного быстрее, не возиться слишком глубоко? В основном мой код выглядит следующим образом, и я хотел бы сделать его таким простым;)

os.chdir(webroot)
httpd = BaseHTTPServer.HTTPServer(("", port), SimpleHTTPServer.SimpleHTTPRequestHandler)
print("Serving directory %s on port %i" %(webroot, port) )
try:
 httpd.serve_forever()
except KeyboardInterrupt:
 print("Server stopped.")

Ответы [ 3 ]

8 голосов
/ 16 марта 2010

Вы можете создать свой собственный класс потоков или разветвлений с наследованием миксина из SocketServer :

import SocketServer
import BaseHTTPServer

class ThreadingHTTPServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer):
    pass

У этого есть свои ограничения, поскольку он не использует пул потоков, ограничен GIT и т. Д., Но это может немного помочь (при относительно небольших усилиях). Помните, что запросы будут обрабатываться одновременно несколькими потоками, поэтому обязательно установите правильную блокировку доступа к глобальным / общим данным (если такие данные не являются неизменными после запуска), выполненные в ходе обработки запроса.

Этот вопрос SO охватывает ту же землю (не особенно в длину).

1 голос
/ 16 марта 2010

Вы также можете взглянуть на CherryPy - это тоже довольно просто и имеет несколько потоков запросов без дополнительных усилий. Хотя ваши потребности сейчас могут быть скромными, CP обладает множеством полезных возможностей, которые могут принести вам пользу в будущем.

0 голосов
/ 16 марта 2010

В зависимости от ваших требований, другой вариант может заключаться в подключении Вставить . Хотя, основываясь на вашем примере, это может быть излишним. Что-то сохранить в наборе инструментов.

...