鱼C论坛

 找回密码
 立即注册
查看: 3779|回复: 4

[已解决]为什么tkinter下运行多进程就会弹出多个窗口?

[复制链接]
发表于 2021-3-26 10:15:46 | 显示全部楼层 |阅读模式
20鱼币
为什么tkinter下运行多进程就会弹出多个窗口?

谢谢!!

  1. import multiprocessing as mp
  2. import tkinter as tk


  3. def job(q):
  4.     res = 0
  5.     for i in range(1000000):
  6.         res += i + i**2 + i**3
  7.     q.put(res) # queue

  8. def doit():
  9.     q = mp.Queue()
  10.     p1 = mp.Process(target=job, args=(q,))
  11.     p2 = mp.Process(target=job, args=(q,))
  12.     p1.start()
  13.     p2.start()
  14.     p1.join()
  15.     p2.join()
  16.     res1 = q.get()
  17.     res2 = q.get()
  18.     print('multicore:',res1 + res2)

  19. root = tk.Tk()
  20. frame = tk.Frame(root,height=400,width=400)
  21. frame.grid(row=0)
  22. theButton = tk.Button(frame,height=4,width=10,text='执行',command=doit)
  23. theButton.grid(row=1,column=0)
  24. root.mainloop()
复制代码
最佳答案
2021-3-26 10:15:47
  1. import multiprocessing as mp
  2. import tkinter as tk


  3. def job(q):
  4.     res = 0
  5.     for i in range(1000000):
  6.         res += i + i**2 + i**3
  7.     q.put(res) # queue

  8. def doit():
  9.     q1 = mp.Queue()
  10.     q2 = mp.Queue()
  11.     p1 = mp.Process(target=job, args=(q1,))
  12.     p2 = mp.Process(target=job, args=(q2,))
  13.     p1.start()
  14.     p2.start()
  15.     p1.join()
  16.     p2.join()
  17.     res1 = q1.get()
  18.     res2 = q2.get()
  19.     print('multicore:',res1 + res2)

  20. if __name__ == '__main__':
  21.     root = tk.Tk()
  22.     frame = tk.Frame(root,height=400,width=400)
  23.     frame.grid(row=0)
  24.     theButton = tk.Button(frame,height=4,width=10,text='执行',command=doit)
  25.     theButton.grid(row=1,column=0)
  26.     root.mainloop()
复制代码

最佳答案

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-26 10:15:47 | 显示全部楼层    本楼为最佳答案   
  1. import multiprocessing as mp
  2. import tkinter as tk


  3. def job(q):
  4.     res = 0
  5.     for i in range(1000000):
  6.         res += i + i**2 + i**3
  7.     q.put(res) # queue

  8. def doit():
  9.     q1 = mp.Queue()
  10.     q2 = mp.Queue()
  11.     p1 = mp.Process(target=job, args=(q1,))
  12.     p2 = mp.Process(target=job, args=(q2,))
  13.     p1.start()
  14.     p2.start()
  15.     p1.join()
  16.     p2.join()
  17.     res1 = q1.get()
  18.     res2 = q2.get()
  19.     print('multicore:',res1 + res2)

  20. if __name__ == '__main__':
  21.     root = tk.Tk()
  22.     frame = tk.Frame(root,height=400,width=400)
  23.     frame.grid(row=0)
  24.     theButton = tk.Button(frame,height=4,width=10,text='执行',command=doit)
  25.     theButton.grid(row=1,column=0)
  26.     root.mainloop()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-26 11:04:16 | 显示全部楼层

谢谢,请问为什么加上if__name__就可以了?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-26 11:38:39 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-26 11:48:15 | 显示全部楼层
逃兵 发表于 2021-3-26 11:38
https://docs.python.org/zh-tw/3.6/library/multiprocessing.html#multiprocessing-programming

谢谢,如果可以话,帮我看一下另一个帖子的问题,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-26 03:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表