我正在学习Python中的多处理和线程来处理和创建大量文件,该图如下所示diagram
每个输出文件都依赖于所有输入文件的分析。
程序的单次处理需要相当长的时间,所以我尝试了以下代码:
(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 运行这些代码。然而,多处理方法与单处理方法花费的时间大约相同,而Threading方法大约花费单处理方法的75%。
我的问题是:
我的代码正确吗?
有没有更好的方法/代码来提高效率? 谢谢!
最佳答案
您的处理受 I/O 限制,而不是 CPU 限制。因此,拥有多个进程这一事实并没有什么帮助。多处理中的每个 Python 进程都在等待输入或输出,而 CPU 不执行任何操作。增加多处理中的池大小应该可以提高性能。
关于python - Python 中的多处理与线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66864183/