python - Python 中的多处理与线程

标签 python multithreading multiprocessing python-multithreading

我正在学习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/

相关文章:

python - 属性错误: Can't get attribute 'journalerReader' on <module '__mp_main__

python - sklearn 中的特征哈希

python - 为什么在 python 中评估 boolean 对象需要时间

不以 X 开头的 Python 匹配字符串

c# - .NET 中的变量新鲜度保证( volatile 与 volatile 读取)

javascript - javascript中的线程(或类似的东西)

Java 在启动新线程之前自动等待线程完成

python - 当我尝试内存时,为什么我的代码会变慢?

java - 在不同的核心上运行进程

c++ - 多线程和多进程应用程序的锁定机制有什么区别?