首页 > 解决方案 > Concurrent.futures.map 从头开始​​初始化代码

问题描述

我是一个相当初学者的 Python 程序员,通常没有太多经验,目前我正在尝试并行化一个在我的代码中受 CPU 高度限制的进程。我正在使用 anaconda 创建环境并使用 Visual Code 进行调试。代码摘要如下:

from tkinter import filedialog
import myfuncs as mf, concurrent.futures
file_path = filedialog.askopenfilename('Ask for a file containing data')
# import data from file_path
a = input('Ask the user for input')

接下来的计算是根据这些进行的,我到达了需要迭代列表列表的阶段。这些列表最多可包含两个值,并调用单独的文件。

例如输入是:

sub_data1 = [test1]
sub_data2 = [test1, test2]
dataset = [sub_data1, sub_data2]

这是我使用concurrent.futures.ProcessPoolExecutor()-instance 及其.map()方法的阶段:

with concurrent.futures.ProcessPoolExecutor() as executor:
   sm_res = executor.map(mf.process_distr, dataset)

在 amyfuncs.py中,该mf.process_distr()函数的工作方式如下:

def process_distr(tests):
    sm_reg = []
    for i in range(len(tests)):                
        if i==0:
            # do stuff
            sm_reg.append(result1)
        else:
            # do stuff
            sm_reg.append(result2)
    return sm_reg

问题是,当我尝试在main.py文件上执行此代码时,似乎main.py开始运行多次,并要求用户输入和文件对话框多次弹出(与核心数相同)。

我该如何解决这个问题?

编辑:阅读更多内容后,将整个 main.py 代码封装为:

if __name__ == '__main__':

成功了。感谢任何花时间帮助解决我的菜鸟问题的人。

标签: pythonpython-3.xparallel-processing

解决方案


推荐阅读