在我的课堂上,我画了Tkinter元素,我按下了右键,从互联网上下载了很长一段时间的数据。此时,我的程序在Windows中的窗口冻结=(我正在努力做到这一点:
def get_data_orders_production(url):
print(2)
...
return [1, 2, 3, 4 ...]
class MyApp():
def __init__(self, root):
self.root = root
...
def check_process(self, p):
if p.is_alive():
print(1)
self.root.after(2000, lambda p=p: self.check_process(p))
def create_page_tk(self, flag):
p = multiprocessing.Process(target=get_data_orders_production, args=(self.url))
p.start()
self.check_process(p)
p.join()
当启动该功能时:;create_page_tk"-print(1(和print(2(同时执行,则递归不起作用!我也不知道如何从";数据订单生产"作用
调用p.join()
将阻塞主应用程序,直到进程完成。
您还需要进程间通信来跨进程交换数据,如multiprocessing.Queue
。
import multiprocessing
...
def get_data_orders_production(url, queue):
print(2)
# ...
# return required data via queue
queue.put([1, 2, 3, 4])
...
class MyApp():
def __init__(self, root):
self.root = root
# create a queue for exchanging data between processes
self.queue = multiprocessing.Queue()
#...
def check_process(self, p):
if p.is_alive():
print(1)
self.root.after(2000, self.check_process, p)
else:
if not self.queue.empty():
# get and show data from queue
print(self.queue.get())
def create_page_tk(self, flag):
p = multiprocessing.Process(target=get_data_orders_production, args=(self.url, self.queue))
p.start()
self.check_process(p)
# don't call p.join()
...