我有以下代码将md5sums写入日志文件
for file in files_output:
p=subprocess.Popen(['md5sum',file],stdout=logfile)
p.wait()
这些东西会同时写吗?i、 e.如果md5sum需要一个文件很长时间,那么在等待前一个文件完成之前,是否会启动另一个文件?
如果上面的答案是yes,那么我可以假定写入日志文件的md5sum的顺序可能会根据每个文件的md5sum所用的时间而有所不同吗?(有些文件可能很大,有些文件很小)
Tags:
所有子进程都并行运行。(为了避免这种情况,必须显式地等待它们完成。)它们甚至可以同时写入日志文件,从而混淆输出。为了避免这种情况,您应该让每个进程写入不同的日志文件,并在所有进程完成时收集所有输出。
之后,结果应存储在
result
中。另外,在
for
循环之后生成p.wait()
的方法将只等待最后一个md5sum进程完成,其余进程可能仍在运行。但是,如果您将md5sum输出收集到临时文件中,并在所有进程完成后将其收集回一个文件中,那么您可以稍微修改此代码,使其仍然具有并行处理和同步输出可预测性的优点。
从并行md5sum子进程收集输出的一种简单方法是使用线程池并从主进程写入文件:
md5sum
的输出很小,因此可以将其存储在内存中imap
保持顺序number_of_processes
可能不同于文件或CPU内核的数量(较大的值并不意味着更快:它取决于IO(磁盘)和CPU的相对性能)您可以尝试一次将多个文件传递给md5sum子进程。
在这种情况下不需要外部子流程;you can calculate md5 in Python:
要使用多个进程而不是线程(允许纯Python
md5sum()
使用多个cpu并行运行),只需从上述代码的导入中删除.dummy
。相关问题 更多 >
编程相关推荐