线程执行时程序暂停求助:Web服务器线程阻塞CEF初始化
问题分析与解决方案
你的代码核心问题是调用了webServerThread.join()——这个方法会强制主线程阻塞,等待子线程完全结束后才继续执行后续代码。但python -m http.server是持续运行的无限循环,导致主线程永远卡在这一步,CEF相关的初始化和浏览器创建代码根本没机会执行。
解决步骤
直接删除webServerThread.join()这一行即可。原因是你已经将线程设置为daemon=True,这类守护线程会在主线程结束时自动终止,无需手动等待。
修改后的代码
print("Server started http://%s:%s" % (hostName, serverPort)) webServerThread = threading.Thread(target=os.system, args=("python -m http.server 8081",), daemon=True) webServerThread.start() # 移除join(),主线程继续执行CEF初始化流程 print('Initialising CEF') cef.Initialize() print('[DEBUG] CreateBrowserSync') cef.CreateBrowserSync(url="http://127.0.0.1:8081/compfile.html") print('[DEBUG] MessageLoop') cef.MessageLoop()
这样修改后,主线程会在启动web服务器线程后立即继续执行CEF的初始化代码,浏览器能正常加载服务器上的页面;当CEF的消息循环退出(比如关闭浏览器窗口),主线程结束,守护线程形式的web服务器也会随之终止。
内容的提问来源于stack exchange,提问作者Qweru
相关产品推荐
相关产品推荐

