Python 把烧瓶放进线里

Python 把烧瓶放进线里,python,multithreading,flask,Python,Multithreading,Flask,我尝试以线程的形式调用一个方法,然后在StartServer方法在后台运行时调用另一个方法,但在执行self.thread.run()时,代码被卡住了。有什么想法吗?我试图将启动服务器放在另一个类中,在一个外部函数中,但我仍然存在这个问题 import time import webview import threading from flask import Flask class Windows: def __init__(self, EntryPoint = "ind

我尝试以线程的形式调用一个方法,然后在StartServer方法在后台运行时调用另一个方法,但在执行self.thread.run()时,代码被卡住了。有什么想法吗?我试图将启动服务器放在另一个类中,在一个外部函数中,但我仍然存在这个问题

import time
import webview
import threading
from flask import Flask

class Windows:

    def __init__(self, EntryPoint = "index.html"):

        self.EntryPointContent = self.ReadPage(EntryPoint)

        self.Thread = threading.Thread(target = self.StartServer)
        self.Thread.daemon = True
        self.Thread.run()
        
        self.ShowWindows()

    def StartServer(self):

        app = Flask(__name__)
        app.debug = False
        app.reloader = False

        @app.route("/")
        def root():
            return self.EntryPointContent

        app.run()


    def ReadPage(self, FileName):

        File = open(FileName, "r")
        return File.read()


    def ShowWindows(self):

        webview.create_window("Hey !", "http://localhost:5000")
        webview.start()

app = Windows(EntryPoint="page.html")
我猜

app.reloader = False
没有做你希望做的事。相反,试试看

app.run(use_reloader=False)
我猜

app.reloader = False
没有做你希望做的事。相反,试试看

app.run(use_reloader=False)

调用
Thread.start()
,而不是
Thread.run()
。Run将只调用当前线程上的
StartServer
方法。下面是一个简短的示例,您可以尝试一下

import threading
from time import sleep


def l(msg):
    while True:
        print(msg)
        sleep(1)


thread = threading.Thread(target=lambda: l('foo'))
thread.start() # swap with thread.run()

l('bar')

调用
Thread.start()
,而不是
Thread.run()
。Run将只调用当前线程上的
StartServer
方法。下面是一个简短的示例,您可以尝试一下

import threading
from time import sleep


def l(msg):
    while True:
        print(msg)
        sleep(1)


thread = threading.Thread(target=lambda: l('foo'))
thread.start() # swap with thread.run()

l('bar')

尝试从新线程调用该类。尝试从新线程调用该类。