Coo*_*tar 11 python parallel-processing optimization
我们需要处理的各种目录中有大约500GB的图像.每个图像的大小约为4MB,我们有一个python脚本,一次处理一个图像(它读取元数据并将其存储在数据库中).每个目录可能需要1-4小时才能处理,具体取决于大小.
我们可以在GNU/Linux操作系统上使用2.2Ghz四核处理器和16GB RAM.当前脚本仅使用一个处理器.利用其他内核和RAM来更快地处理图像的最佳方法是什么?启动多个Python进程来运行脚本会利用其他内核吗?
另一个选择是使用Gearman或Beanstalk之类的东西将工作分配给其他机器.我已经看了多处理库但不知道如何利用它.
启动多个Python进程来运行脚本会利用其他内核吗?
是的,如果任务受CPU约束,它将会.这可能是最简单的选择.但是,不要为每个文件或每个目录生成单个进程; 考虑使用像这样的工具,parallel(1)
并让它产生每个核心两个进程的东西.
另一个选择是使用Gearman或Beanstalk之类的东西将工作分配给其他机器.
那可能有用.另外,看看ZeroMQ的Python绑定,它使分布式处理变得非常简单.
我已经看了多处理库但不知道如何利用它.
比如定义一个函数,process
它读取单个目录中的图像,连接到数据库并存储元数据.让它返回一个表示成功或失败的布尔值.我们directories
是目录处理的列表.然后
import multiprocessing
pool = multiprocessing.Pool(multiprocessing.cpu_count())
success = all(pool.imap_unordered(process, directories))
Run Code Online (Sandbox Code Playgroud)
将并行处理所有目录.如果需要,您还可以在文件级执行并行操作; 这需要更多的修修补补.
请注意,这将在第一次失败时停止; 使其容错需要更多的工作.
归档时间: |
|
查看次数: |
3658 次 |
最近记录: |