首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pywebview会阻止flask应用程序,除非我打开两个webviews

Pywebview会阻止flask应用程序,除非我打开两个webviews
EN

Stack Overflow用户
提问于 2017-04-12 19:57:30
回答 1查看 1.1K关注 0票数 1

我用一个相当简单的flask后端构建了一个python桌面webapp,目前我只是通过Chrome提供服务。我试图用pywebview打包它,但我遇到了一个集成的障碍。

我在包的主文件中有如下代码:

代码语言:javascript
复制
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线程,它总是有效的:

代码语言:javascript
复制
if __name__ == '__main__':
    t = threading.Thread(target=start_prod_server)
    t.daemon = True
    t.start()

    # This works every time
    threading.Timer(1.5, start_gui).start()
    threading.Timer(1.5, start_gui).start()

    sys.exit()

这可能是什么原因造成的?我对Python中的线程的理解相当有限,所以我不确定去哪里看。这可能是pywebview中的一个bug,还是我的线程做错了什么?

我也对webview部分的替代方案的建议持开放态度,但我想保留python/flask部分,因为应用程序已经工作得很好了。

EN

回答 1

Stack Overflow用户

发布于 2017-04-12 21:58:38

嗯,经过一番挖掘,我想我自己找到了解决方案。

无论出于什么原因,webview.create_window()没有导航到页面并被卡住。打开第二个窗口会导致两个窗口都导航到url,并允许应用程序继续运行。(我仍然不明白为什么)

只需添加如下所示的webview.load_url("http://localhost:5000")即可解决问题:

代码语言:javascript
复制
if __name__ == '__main__':
    t = threading.Thread(target=start_prod_server)
    t.daemon = True
    t.start()

    threading.Timer(1.5, start_gui).start()
    webview.load_url("http://localhost:5000")

    sys.exit()

不过,任何关于为什么会发生这种情况的见解都是受欢迎的。在pywebview的源代码中,这两个方法对self.browser.web_browser.Navigate(url)进行完全相同的调用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43368875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档