我必须处理数组中的数千条记录。我像这样做了正常的 for 循环
for record in records:
results = processFile(record)
write_output_record(o, results)
上面的脚本花了 427.270612955 秒!
因为这些记录之间没有依赖关系。我使用Python多线程模块希望加快该过程。以下是我的实现
import multiprocessing
from multiprocessing.dummy import Pool as ThreadPool
pool = ThreadPool(processes=threads)
results = pool.map(processFile, records)
pool.close()
pool.join()
write_output(o, results)
我的电脑有 8 个 CPU。它需要 852.153398991 秒。 有人可以帮助我,因为我做错了什么?
PS:进程文件函数没有I/O。 它主要处理记录并发回更新记录
尝试使用 vmstat 并验证这是否是内存问题。有时,如果每个线程都会大幅增加 RAM 使用率,则使用多线程可能会降低系统速度。
通常人们会遇到三种类型的问题:CPU限制(CPU计算约束),内存限制(RAM约束)和I/O绑定(网络和硬盘驱动器I/O约束)。