我是一名相当初级的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__':
能解决这个问题。谢谢任何愿意抽出时间来解决我的菜鸟问题的人。