具有多个参数的 MultiProcess 函数
MultiProcess function with multiple arguments
我正在 python 深入研究多处理世界。
看了一些视频后,由于我的职能性质,我想出了一个问题。
这个函数有 4 个参数:
- 第一个参数是要读取的文件,因此,这是要读取的文件列表。
- 以下2个参数是两个不同的字典。
- 最后一个参数是可选参数"debug_mode",需要设置为"True"
# process_data(file, signals_dict, parameter_dict, debug_mode=False)
file_list = [...]
t1 = time.time()
with concurrent.futures.ProcessPoolExecutor() as executor:
executor.map(process_data, file_list)
t2 = time.time()
问题是:
如何指定函数的其余参数?
提前致谢
您需要为每个进程创建包含参数的列表列表:
params_list = [[file1, dict1_1, dict2_1, True],
[file2, dict1_2, dict2_2, True],
[file3, dict1_3, dict2_3]]
然后,您可以像这样创建流程:
executor.map(process_data, params_list)
ProcessPoolExecutor.map
文档薄弱。工人接受一个参数。如果您的目标具有不同的调用签名,您需要编写一个传递容器并知道如何将其扩展到参数列表中的中间工作者。该文档也没有明确说明您需要等待作业完成才能关闭池。如果启动作业并退出池上下文 with
子句,池将终止。
import concurrent.futures
import os
def process_data(a,b,c,d):
print(os.getpid(), a, b, c, d)
return a
def _process_data_worker(p):
return process_data(*p)
if __name__ == "__main__":
file_list = [["fooa", "foob", "fooc", "food"],
["bara", "barb", "barc", "bard"]]
with concurrent.futures.ProcessPoolExecutor() as executor:
results = executor.map(_process_data_worker, file_list)
for result in results:
print('result', result)
我正在 python 深入研究多处理世界。
看了一些视频后,由于我的职能性质,我想出了一个问题。
这个函数有 4 个参数:
- 第一个参数是要读取的文件,因此,这是要读取的文件列表。
- 以下2个参数是两个不同的字典。
- 最后一个参数是可选参数"debug_mode",需要设置为"True"
# process_data(file, signals_dict, parameter_dict, debug_mode=False)
file_list = [...]
t1 = time.time()
with concurrent.futures.ProcessPoolExecutor() as executor:
executor.map(process_data, file_list)
t2 = time.time()
问题是: 如何指定函数的其余参数?
提前致谢
您需要为每个进程创建包含参数的列表列表:
params_list = [[file1, dict1_1, dict2_1, True],
[file2, dict1_2, dict2_2, True],
[file3, dict1_3, dict2_3]]
然后,您可以像这样创建流程:
executor.map(process_data, params_list)
ProcessPoolExecutor.map
文档薄弱。工人接受一个参数。如果您的目标具有不同的调用签名,您需要编写一个传递容器并知道如何将其扩展到参数列表中的中间工作者。该文档也没有明确说明您需要等待作业完成才能关闭池。如果启动作业并退出池上下文 with
子句,池将终止。
import concurrent.futures
import os
def process_data(a,b,c,d):
print(os.getpid(), a, b, c, d)
return a
def _process_data_worker(p):
return process_data(*p)
if __name__ == "__main__":
file_list = [["fooa", "foob", "fooc", "food"],
["bara", "barb", "barc", "bard"]]
with concurrent.futures.ProcessPoolExecutor() as executor:
results = executor.map(_process_data_worker, file_list)
for result in results:
print('result', result)