【发布时间】:2017-01-19 22:47:28
【问题描述】:
我需要将数百个输入文件传递给函数以计算一些数字,并将它们写入输出文件。该函数不返回任何值。所以,每个函数调用都是独立的。
我没有串行调用函数,而是尝试了多处理,性能(执行时间)也好不了多少。任何关于提高性能的建议都是有价值的。甚至多处理是解决这个问题的方法吗?
import multiprocessing as mp
NumProcess = 4
def Analysis(InputFile):
#do some calcs
#Write results to output file
#return nothing
FileList = ['InputFile1.csv','InputFile2.csv','InputFile3.csv',....]
pool = mp.Pool(processes=NumProcess)
temp = [pool.apply_async(Analysis, args=(File) for File in FileList]
output = [p.get() for p in temp]
pool.close()
【问题讨论】:
-
是的 - 多处理是正确、最简单的方法。也许您的瓶颈在其他地方。如果您至少有两个 cpu 核心,这应该会更好。
-
此列表中有太多左括号
-
您的算法是否受 CPU 限制或 I/O 限制?如果它是受 I/O 限制的,那么生成多个线程/进程不会使其更快,并且如果它导致硬盘驱动器的磁头必须来回寻找比单次更多的来回搜索,则可能会使其更慢 -线程/单进程案例。
标签: python multithreading