【发布时间】:2022-01-16 12:14:53
【问题描述】:
我正在尝试构建一个 Python 程序,该程序通过 UDP 发送数据并有一个网站进行设置。 对于这个程序,我需要一个脚本来运行烧瓶网络服务器和一个脚本来同时提取数据。我想使用线程同时运行进程(Flask 服务器和数据拉/发送部分)。 因为我需要一直运行部分来拉取数据,所以我做了“While True:”,让它一直在运行 但是当我启动我的线程时,只有提取数据的线程正在运行。 我认为问题在于,我并没有真正同时运行 2 个线程。但我认为使用线程应该可以同时运行烧瓶线程和数据线程。 但我无法让它工作,我无法找出问题所在。
这是我试图启动两个线程的文件:
import threading
import time
import mainl
import webserver
class mydata(threading.Thread):
def __init__(self, iD, name):
threading.Thread.__init__(self)
self.iD = iD
self.name = name
def run(self):
mainl.mainloop()
class mywebserver(threading.Thread):
def __init__(self, iD, name):
threading.Thread.__init__(self)
self.iD = iD
self.name = name
def run(self):
webserver()
t1 = mydata(1, "t1")
t2 = mywebserver(2, "t2")
t2.start()
t1.start()
这是提取数据的文件,它应该始终运行,这就是我使用“While True:”的原因:
def mainloop():
while True:
import data1
import data2
import data3
###UDP###
ip_adress = "192.168.178.150"
udp_port = 8888
text = ""
data1 = data1.daten()
data2 = data2.daten()
data3 = data3.daten()
# print("Coin STR", coin)
time.sleep(3)
text = "data1 data2 data3"
send.senden(ip_adress, udp_port, text)
【问题讨论】:
-
问题很可能在于 webserver() 函数,因为其余部分似乎都可以工作。
-
当我只启动 Webserver() 时,服务器也在工作。但我发现, mainl 或 mainl.mainloop() 不是从线程运行的。我不知道它为什么启动,但是线程 t1 和 t2 甚至没有启动,因为 mainl 或 mainl.mainloop() 在线程启动之前已经在运行。为什么 mainl 或 mainl.mainloop() 已经在运行?我认为这将是问题所在。
标签: python multithreading flask