我一直在尝试编写一个python脚本,它启动一个线程来侦听套接字并将HTTP数据发送给另一个应用程序,以便由同一程序启动。在执行应用程序之前,需要运行套接字服务器。但是,运行套接字服务器的线程会阻止程序的进一步执行,并冻结正在侦听的地方。放一些虚拟代码。Python线程阻塞进一步执行
在模块1:
def runServer(Port, Host, q):
HTTPServerObj = HTTPServer((Host, Port), RequestHandler)
HTTPServerObj.handle_request()
HTTPServerObj.server_close()
q.put((True, {'messageDoNotDuplicate': 'Data sent successfully by the server'}))
class SpoofHTTPServer(object):
def runServerThread(self):
q = Queue.Queue()
serverThread=Thread(target=runServer, args=(self.Port, self.Host, q))
serverThread.daemon=True
serverThread.start()
result = q.get()
print result
return result
在模块2:
from module1 import SpoofHTTPServer
spoofHTTPServer = SpoofHTTPServer()
result = spoofHTTPServer.runServerThread()
rc = myApp.start()
的myApp.start()永远不会被作为线程阻塞它执行。
根据http://docs.python.org/2/library/queue.html#Queue.Queue.get它看起来像一个可以使用非阻塞调用get(假)或get_nowait() ,如果这是所需的行为。 – woozyking
@woozyking:是的,但在这种情况下,它总是会引发'Empty'异常,因为将数据插入队列的代码还没有执行。 – Kaivosukeltaja
我明白了。谢谢! – woozyking