Поток BaseHTTPServer не работает

#python #multithreading

#python #многопоточность

Вопрос:

Мой код прост. Используя BaseHTTPServer и ThreadInMix, я хочу запустить скрипт python (Script1.py ) для каждого запроса, сделанного одновременно.

Мой код-

 from subprocess import PIPE, Popen
from SocketServer import ThreadingMixIn
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
import time

def simple_script(self):
   print 'simple_script'
   s = Popen('C:/Python27/python C:/Script1.py 5', shell=True,
             stdout=PIPE, stderr=PIPE)
   out, err = s.communicate()
   print out, err
   self.wfile.write(out)

class Handler(BaseHTTPRequestHandler):
   def do_GET(self):
       self.send_response(200)
       self.end_headers()
       self.wfile.write('{0}n'.format(time.asctime()))
       simple_script(self)
       return

class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
   pass

if __name__ == '__main__':
   server = ThreadedHTTPServer(('', 8080), Handler)
   print 'Starting server, use <Ctrl-C> to stop'
   server.serve_forever()

"""
# C:/Script1.py
import time, sys

s = time.time()

while True:
   if time.time() - s > int(sys.argv[1]):
       break
   else:
       time.sleep(1)
       print time.asctime()
"""
  

Я только что узнал, что - С URL: http://localhost:8080 Если я открываю несколько вкладок / браузеров для IE, это работает ПРОСТО отлично, но,

Если я открою несколько вкладок / страниц в Chrome или Firefox, страницы будут ждать предыдущей страницы? Это не подразумевает потоковую передачу в Chrome или Firefox? Любая помощь? Спасибо

Ответ №1:

Работает просто отлично для меня:

Запуск сервера, используйте для остановки
localhost.localdomain - - [03 / Oct/ 2011 16:25:55] "GET / HTTP /1.1" 200 -
simple_script
localhost.localdomain - - [03 / Oct / 2011 16:25:55] "GET / HTTP / 1.1" 200 -
simple_scriptПн
Окт 3 16:25:56 2011
Пн Окт 3 16:25:57 2011
Пн Окт 3 16:25:58 2011
Пн Окт 3 16:25:59 2011 Пн Окт 3 16:26:00 2011
Пн Окт 3 16:26:00 2011
Пн Окт 3 16:26:01 2011

Пн Окт 3 16:25:56 2011
Пн Окт 3 16:25:57 2011
Пн Окт 3 16:25:58 2011
Пн Окт 3 16:25:59 2011 Пн Окт 3 16:26:00 2011
Пн Окт 3 16:26:00 2011
Пн Окт 3 16:26:01 2011

Комментарии:

1. Привет, Рингдинг, не могли бы вы сказать мне, какой браузер вы использовали для запуска своих запросов?

2. Привет, Рингдинг, я обновил код, исходя из своих потребностей!! Не могли бы вы попробовать еще раз и сообщить мне, работает ли это? Огромное спасибо!!

3. Я понял. Но вы пробовали это с Firefox или Chrome? То же время наступает только для IE, а не для Firefox и Chrome!! Если вы посмотрите на комментарий frnknstn blog.doughellmann.com/2007/12/pymotw-basehttpserver.html , вы заметите, что firefox отправляет 2-й запрос только в том случае, если выполняется 1-й запрос. Знаете ли вы причину? Спасибо!!

4. Мой Firefox ведет себя точно так же. Обычно Firefox разрешает количество (обычно небольшое, но> 1) одновременных подключений на сервер. По-видимому, это не применяется, когда два URL-адреса абсолютно одинаковы (предположительно, включая соответствующие заголовки, такие как файлы cookie). Вы можете обмануть это, добавив немного мусора; откройте http://<host>:<port>/g1 на одной вкладке и http://<host>:<port>/g2 на другой. Тогда он будет работать так, как ожидалось.

5. Отлично, я только что протестировал это!! Это работает именно так, как вы упомянули. Это здорово!! Знаете ли вы какие-либо настройки в Firefox, которые позволяют ему работать нормально?? Спасибо