首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多参数MultiProcess函数

多参数MultiProcess函数
EN

Stack Overflow用户
提问于 2020-05-13 02:39:36
回答 2查看 2.2K关注 0票数 1

我在巨蟒中潜入多处理世界。

在看了一些视频后,我提出了一个问题,因为我的功能的性质。

此函数包含4个参数:

第一个参数是要读取的文件,因此,这是要读取的文件列表。

代码语言:javascript
复制
# 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()

问题是:如何为函数指定其余参数?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-13 14:47:44

ProcessPoolExecutor.map文档很薄弱。工作人员接受单个参数。如果目标具有不同的调用签名,则需要编写传递容器并知道如何将其展开到参数列表中的中间工作人员。文档也不能清楚地表明,在关闭池之前,您需要等待作业完成。如果启动作业并退出池上下文with子句,则池将终止。

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2020-05-13 02:52:10

您需要创建一个列表,其中包含每个进程的参数:

代码语言:javascript
复制
params_list = [[file1, dict1_1, dict2_1, True],
               [file2, dict1_2, dict2_2, True],
               [file3, dict1_3, dict2_3]]

然后,您可以创建这样的进程:

代码语言:javascript
复制
executor.map(process_data, params_list)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61765439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档