【发布时间】:2021-09-03 22:00:20
【问题描述】:
我正在尝试使用进程更新框架,但我无法这样做。如果我不使用进程,框架会随子元素一起更新,但在使用多进程时不会。
这是我尝试过的(代码是类的一部分):
def zx(self, q):
print('asdadsas')
lbl = Label(self.myframe, text="assagj")
lbl.pack(ipady=2, padx=10, pady=5, anchor=NW)
try:
p = multiprocessing.Process(target=self.zx, args=('a', ))
p.daemon=True
p.start()
sleep(2)
p.terminate()
except KeyboardInterrupt:
p.terminate()
except:
p.terminate()
【问题讨论】:
-
省去心痛,现在切换到 Qt...文档是一流的,它为几乎所有事情(包括与主事件循环通信的线程和进程)提供了解决方案。唯一的小问题是文档是针对 C++ 的,但 python 接口在 99.99% 的情况下是相同的。
-
@Aaron Tkinter 几乎可以做任何事情,并且有据可查。在这种情况下,我会使用线程而不是多进程。
-
我讨厌 C++,但出于某种原因喜欢 C,它适用于我的小项目,而 python+tk 是最快的,所以我想我现在只能坚持下去。
-
@Mike-SMT
tkinter不是线程安全的,所以你不应该在不同的线程中使用它。我看到tkinter在从另一个线程访问它时崩溃而没有错误回溯。 -
@Mike-SMT 我只是向您展示,在您创建
Tk()窗口之外的线程中使用tkinter时,让python 崩溃而没有错误回溯并不难。问题是它没有给你回溯,所以很难调试。我之前在一个大项目中遇到过这个问题,我唯一的选择是重新启动整个项目。这就是为什么我建议人们不要使用tkinter和threading,除非他们真的知道风险。
标签: python tkinter multiprocessing tk