python - 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__':
成功了。感谢任何花时间帮助解决我的菜鸟问题的人。
解决方案
推荐阅读
- python - 在创建由两个子模型组成的模型时出现“您必须为占位符张量提供一个值”错误,所有子模型都是使用功能 API 创建的
- python - Kivy 处理多个按钮事件
- python-3.x - 为什么 Selenium 会覆盖我的 Firefox 配置文件
- python - 从文件中删除当前行
- docker - Gradle 6.3 Docker Palantir 插件:没有方法签名:build_8uxeoxw0v35xxabibl49jhru8.docker()
- continuous-integration - 如何同步 Gitlab、Github、Travis、Circle 等的 CI 配置?
- p5.js - 在 p5.js 中拉伸视频?
- c# - 如何在不更改 CSV 的情况下读取多行字段?
- php - 试图将电话号码设为链接
- javascript - 使用 PointsMaterial 和 CircleGeometry 创建相同的圆