我用一个相当简单的flask后端构建了一个python桌面webapp,目前我只通过Chrome提供服务。我试图用pywebview打包它,但是遇到了一个集成的障碍。在
我在包的主文件中有如下代码:import os
import sys
from flasher import app
import httplib
import webview
import threading
def start_prod_server():
runserver(debug=False, reloader=False)
def start_gui():
webview.create_window("MyAppName", "http://localhost:5000", height=1000)
def runserver(debug=True, reloader=False):
port = int(os.environ.get('PORT', 5000))
url = "http://localhost:{}".format(port)
print("ready!")
app.run(host='::', port=port, debug=debug, use_reloader=reloader)
if __name__ == '__main__':
t = threading.Thread(target=start_prod_server)
t.daemon = True
t.start()
# This never works
threading.Timer(1.5, start_gui).start()
sys.exit()
这几乎是系统性的失败,窗口显示为空白,后端不响应任何内容(包括来自单独桌面浏览器的请求)。在
我无意中发现,如果我启动两个webview线程,它总是有效的:
^{pr2}$
是什么引起的?我对Python中线程的理解相当有限,所以我不知道该去哪里看看。这可能是pywebview中的一个bug,还是我的线程出了问题?在
我也对webview部分的替代方案持开放态度,但我希望保留python/flask部分,因为应用程序已经可以正常工作了。在