繁体   English   中英

Python3通过多处理并行化作业

[英]Python3 parallelize jobs with multiprocessing

我有一个脚本,用于将包含目录的文件解析为其他文件,必须打开该目录并阅读搜索关键字。 由于文件数量在增加,我想启用多处理功能以减少完成作业所需的时间。

我当时正在考虑让父进程解析包含目录的文件,并使用子进程来获取其他文件。 由于父级需要在创建子级之前获取数据,因此它将是一种阻塞架构(父级必须先读取所有文件才能调用子级),而我想将包含目录的列表发送给一个子级每100个结果。

因此,父级继续解析文件,而子级同时工作以查找关键字。

我该怎么做? 如果您需要更多说明,请问我,我会告诉您更多。

谢谢。

我当时正在考虑让父进程解析包含目录的文件,并使用子进程来获取其他文件。

目录是名称。 父级解析列表,并为每个子级提供目录名称 对? 然后,孩子读取目录中的文件。

由于父级需要在创建子级之前获取数据,因此这将是一种阻塞架构(父级必须先读取所有文件才能调用子级),

嗯。 孩子不读取目录中的文件吗? 在上面,它说孩子确实读取了文件。 父母读取大量数据并将其推送给孩子是愚蠢的。

而我想将包含100个结果的目录的列表发送给一个孩子。

好。 这是不同的。 现在,您要让父级读取目录名称,读取一批100个文件名,然后将文件名发送给子级。 好的。 这比读取所有数据要愚蠢。 现在只有100个名字。

因此,父级继续解析文件,而子级同时工作以查找关键字。

好的。 但是您完全错过了并行处理的机会。

仔细阅读multprocessing模块。

您想要的是两个队列和两种工作人员。

您的应用程序将建立两个队列。 它将构建源流程,“获取批处理”工作程序池和“获取文件”工作程序池。

  • 资源。 该过程(基本上)是一个读取原始“包含目录的文件”的函数。 并将每个目录名称放入“获取批处理”队列中。

  • 获取批次。 这是一个进程池。 每个进程都是一个从“获取批处理”队列中获取条目的函数。 这是目录名称。 然后,它读取目录,并将100个文件名的元组排队到“获取文件”队列中。

  • 获取文件。 这是一个进程池。 每个进程都是从“获取文件”队列中获取条目的功能。 这是一个包含100个文件的元组。 然后,它打开并读取这100个文件,它们知道它们的作用。

多处理模块的想法是使用所有工作人员池,这些工作人员池均从队列中获取任务,并将结果放入另一个队列中。 这些工人都同时运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM