首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Windows上用于批量文件/转换操作的Python多处理

在Windows上用于批量文件/转换操作的Python多处理
EN

Stack Overflow用户
提问于 2009-08-26 05:53:20
回答 1查看 658关注 0票数 0

我已经编写了一个python脚本,它监视目录中是否有新的子目录,然后在循环中对每个子目录执行操作。我们有一个创建这些子目录的外部进程。在每个子目录中都有一个文本文件和一些图像。对于每个图像,文本文件中都有一条记录(行)。对于每个子目录,我的脚本扫描文本文件,然后调用一些外部程序,其中一个检测空白图像(自定义可执行文件),然后调用"mogrify“(ImageMagick的一部分)来调整图像大小并转换图像,最后调用7-zip将所有转换后的图像和文本文件打包到一个单独的归档中。

该脚本运行良好,但当前是连续的。一次循环遍历每个子目录。在我看来,这将是一个做一些多处理的好机会,因为这是在双CPU机器上运行的(总共8个核心)。

给定子目录的处理是独立的,所有的others...they都是自包含的。

目前,我正在使用对os.listdir()的调用创建一个子目录列表,然后遍历该列表。我认为我可以将每个子目录的所有代码(转换等)移到一个单独的函数中,然后以某种方式创建一个单独的进程来处理每个子目录。由于我对Python比较陌生,因此对如何处理此类多进程提出一些建议将不胜感激。我在Vista x64上运行Python2.6。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-08-26 06:09:46

我同意这种设计听起来可以从并发性中获益。看看the multiprocessing module吧。你可能还想看看the threading module,比较一下速度。很难准确地说出需要多少个内核才能从多处理和线程中获益,8个内核在线程速度可能更快的范围内(是的,尽管有GIL)。

从设计的角度来看,我最大的建议是尽可能避免进程之间的交互。让一个中央线程查找触发进程创建的事件(我猜这是一个子目录创建?)然后产生一个进程来处理该子目录。从那时起,衍生的进程将不再与任何其他进程交互。从你的描述来看,这似乎是可能的。

最后,我想补充一句鼓励迁移到Python 3.0的话。有很多关于继续使用2.x的讨论,但3.0确实做了一些真正的改进,随着越来越多的人开始迁移到Python3.0,获得2.x的工具和支持将变得更加困难。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1332583

复制
相关文章

相似问题

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