BaseHTTPServer线程不起作用

时间:2011-10-02 21:59:44

标签: python multithreading

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

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 个答案:

答案 0 :(得分: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
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