使用pyqt5或tkinter结合loky库编写一个简单的多进程并行计算程序,在windows系统打包后运行报错,弹出多个新主界面窗口,请问怎么解决?

u010510845 2023-05-08 12:02:49

 以下是一个简单的tkinter界面示例,有大佬打包成功后能正常运行的吗?

import sys
import os
from loky import get_reusable_executor
import tkinter as tk
from tkinter.scrolledtext import ScrolledText



def func_async(i):
    pid = os.getpid()
    return (2 * i, pid)


def run_tests():
    f1 = test_1()
    f2 = test_2()
    f3 = test_3()

    main_pid = os.getpid()
    results = [f1.result(), f2.result(), f3.result()]

    pids = [pid for _, pid in results]

    output = []

    for i, (val, pid) in enumerate(results):
        assert val == 2 * (i + 1)
        assert pid != main_pid
        output.append(f"Job {i + 1}: value={val}, pid={pid}")

    output.append(f"All the computation were run in a single `ProcessPoolExecutor` with worker pid={pids[0]}")

    return "\n".join(output)


def test_1():
    executor = get_reusable_executor(max_workers=3)
    return executor.submit(func_async, 1)


def test_2():
    executor = get_reusable_executor(max_workers=3)
    return executor.submit(func_async, 2)


def test_3():
    executor = get_reusable_executor(max_workers=3)
    return executor.submit(func_async, 3)


class MyApp(tk.Tk):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.title("Tkinter Test Runner")
        self.geometry("400x300")

        self.text_edit = ScrolledText(self, wrap=tk.WORD)
        self.text_edit.pack(expand=True, fill=tk.BOTH)

        btn = tk.Button(self, text='Run Tests', command=self.on_click)
        btn.pack()

    def on_click(self):
        output = run_tests()
        self.text_edit.delete(1.0, tk.END)
        self.text_edit.insert(tk.END, output)


if __name__ == '__main__':
    import multiprocessing as mp
    mp.freeze_support()
    app = MyApp()
    app.mainloop()

 

...全文
64 1 打赏 收藏 转发到动态 举报
写回复
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 05-08
精选
  • 打赏
  • 举报
回复
您的问题已经帮您同步至问答, 链接: https://ask.csdn.net/questions/7940150, 请您保持关注, 如果回答有帮助解决此问题, 麻烦您动动小手给相关的回答点赞, Ada会在评论区为您更新结题状态
相关推荐

15,629

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告