Я пытаюсь создать простое настольное приложение, используя PyQt, который запускает SimpleHTTPServer при нажатии кнопки запуска сервера. Я пробовал использовать потоки (как потоки python, так и Qthread), и понимаю, что это невозможно, поскольку оно сталкивается с проблемами с GIL. Вот кодPyQt SimpleHTTPServer: GUI зависает на стартовом сервере
def btn_startserver_clicked(self):
server_thread=threading.Thread(target=start_server())
server_thread.start()
def start_server():
#to get server's IP
host=([(s.connect(('8.8.8.8', 80)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1])
start=8000
end=56999
PORT = random.randint(start,end)
print host,":",PORT
httpd=ThreadedServer(("",PORT), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.handle_request()`
Я попытался создать еще один процесс, но произошло то же самое. Кроме того, если я создаю другой процесс, каждое окно будет всплывать при каждом запросе.
def btn_startserver_clicked(self):
if __name__=='__main__':
server_process=Process(target=start_server())
server_process.start()
Есть ли способ обойти это? Я считаю, что использование многопроцессорности - правильный подход, но я новичок в этом и не могу понять, почему он все еще зависает.
Благодаря
Спасибо. Это была неосторожная ошибка. Но как это все еще выполняется, если python может выполнять только один поток за раз? Или я понял это неправильно? – raksh93
@ raksh93 Python переключается между потоками. Таким образом, многопоточность не обеспечивает производительности, однако она помогает сохранять такие функции, как графические интерфейсы. –