python - 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%。
我的问题是:
我的代码正确吗?
有没有更好的方法/代码来提高效率?谢谢!
解决方案
您的处理受 I/O 限制,而不是 CPU 限制。结果,您拥有多个进程这一事实几乎没有帮助。多处理中的每个 Python 进程都在等待输入或输出,而 CPU 什么也不做。增加多处理中的池大小应该可以提高性能。
推荐阅读
- flutter - 如何在flutter中调用地图或将地图实例化到主类中?
- reactjs - 背景图片不显示
- python - Discord.py - 返回随机表情符号?
- angular - Angular 7 Material 自动完成选项未显示
- html - 如何使用 flex 将 iframe 拉伸到全屏?
- oracle - 从 Oracle 迁移到 PostgreSQL 的 ORA2PG 工具的 Oracle 版本要求
- time-complexity - 这个嵌套 for 循环的时间复杂度是多少?
- c++ - Cmake 交叉依赖
- python - 如何让 NLTK Punkt 句子标记器识别出现在句子中间或结尾的缩写词?
- rust - 无法在 WindowBuild 对象上调用 build_vk_surface()