Я пытаюсь написать скрипт python, который инициирует поток для прослушивания сокета и отправки HTTP-данных в другое приложение, которое будет запущено той же самой программой. Перед запуском приложения необходимо, чтобы сервер сокета выполнялся. Тем не менее поток, выполняющий сервер сокета, блокирует дальнейшее выполнение программы, и он зависает там, где он прослушивает. Поместите некоторый фиктивный код.Python thread blocking дальнейшее выполнение
В модуле 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 (False) или get_nowait() для неблокируемого вызова , если это желаемое поведение. – woozyking
@woozyking: Да, но в этом случае он всегда вызывает исключение 'Empty', потому что код, который вставляет данные в очередь, еще не выполнен. – Kaivosukeltaja
Я вижу. Спасибо вам! – woozyking