Concurrent.futures.map从头开始初始化代码

时间:2020-05-12 07:40:24

标签: python python-3.x parallel-processing

我是一名相当初级的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() 实例及其 .map() 方法的阶段:

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

myfuncs.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__':

能解决这个问题。谢谢任何愿意抽出时间来解决我的菜鸟问题的人。

0 个答案:

没有答案