我一直在嘗試編寫一個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