BaseHTTPServer 线程无法工作

2 投票
1 回答
1000 浏览
提问于 2025-04-17 03:33

我的代码很简单。我想用 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()
"""

我刚发现,

在这个网址:http://localhost:8080,如果我在 IE 浏览器中打开多个标签页/窗口,这一切都运行得很好。

但是,

如果我在 Chrome 或 Firefox 中打开多个标签页/页面,页面却会等着前一个页面加载完?这是不是说明 Chrome 或 Firefox 没有实现多线程?谁能帮帮我?谢谢!

1 个回答

1

对我来说一切都很好:

启动服务器,使用来停止
localhost.localdomain - - [2011年10月3日 16:25:55] "GET / HTTP/1.1" 200 -
simple_script
localhost.localdomain - - [2011年10月3日 16:25:55] "GET / HTTP/1.1" 200 -
simple_script
2011年10月3日 星期一 16:25:56
2011年10月3日 星期一 16:25:57
2011年10月3日 星期一 16:25:58
2011年10月3日 星期一 16:25:59
2011年10月3日 星期一 16:26:00
2011年10月3日 星期一 16:26:01

2011年10月3日 星期一 16:25:56
2011年10月3日 星期一 16:25:57
2011年10月3日 星期一 16:25:58
2011年10月3日 星期一 16:25:59
2011年10月3日 星期一 16:26:00
2011年10月3日 星期一 16:26:01

撰写回答