首页 > 解决方案 > Python中的多处理与线程

问题描述

我正在学习python中的多处理和线程来处理和创建大量文件,图中显示了here

每个输出文件都依赖于所有输入文件的分析。

程序的单个处理需要相当长的时间,所以我尝试了以下代码:

(a) 多处理

start = time.time()
process_count = cpu_count()
p = Pool(process_count)
for i in range(process_count):
    p.apply_async(my_read_process_and_write_func, args=(i,w))

p.close()
p.join()
end = time.time()

(b) 穿线

start = time.time()
thread_count = cpu_count()
thread_list = [] 

for i in range(0, thread_count):
    t = threading.Thread(target=my_read_process_and_write_func, args=(i,))
    thread_list.append(t)

for t in thread_list:
    t.start()

for t in thread_list:
    t.join()

end = time.time()

我在具有 8 个内核的 Windows PC 上使用 Python 3.6 运行这些代码。然而,多处理方法与单处理方法所用的时间大致相同,而线程方法大约是单处理方法的 75%。

我的问题是:

我的代码正确吗?

有没有更好的方法/代码来提高效率?谢谢!

标签: pythonmultithreadingmultiprocessingpython-multithreading

解决方案


您的处理受 I/O 限制,而不是 CPU 限制。结果,您拥有多个进程这一事实几乎没有帮助。多处理中的每个 Python 进程都在等待输入或输出,而 CPU 什么也不做。增加多处理中的池大小应该可以提高性能。


推荐阅读