python - Python 3 Multiprocessing - 我应该使用多少个进程?
问题描述
我有一个运行 8 个进程的简单程序,它通过使用多处理显着减少了脚本运行时间,但是,我不确定应该放置多少进程才能最大限度地提高 CPU 利用率。目前我的 cpu 是 6 个核心,只有 1 个物理 cpu,因为它是一个 VPS。:
def spider1():
def spider2():
def spider3():
def spider4():
def spider5():
def spider6():
def spider7():
def spider8():
if __name__ == '__main__':
p1 = multiprocessing.Process(target=spider1,)
p2 = multiprocessing.Process(target=spider2,)
p3 = multiprocessing.Process(target=spider3,)
p4 = multiprocessing.Process(target=spider4, )
p5 = multiprocessing.Process(target=spider5, )
p6 = multiprocessing.Process(target=spider6, )
p7 = multiprocessing.Process(target=spider7, )
p8 = multiprocessing.Process(target=spider8, )
p1.start()
p2.start()
p3.start()
p4.start()
p5.start()
p6.start()
p7.start()
p8.start()
解决方案
如果要使用 cpu 的数量来计算要生成的进程数,请使用 cpu_count 来查找 cpu 的数量,
psutil.cpu_count()
但是使用 CPU 利用率来计算产生的进程数可能是一种更好的方法,要检查 CPU 利用率,您可以执行以下操作,
import psutil
psutil.cpu_times_percent(interval=1, percpu=False)
这将为您提供 cpu 使用率,例如,您可以使用该信息来决定是否要生成新进程。关注内存和交换可能是个好主意。
我认为这个答案可能很有用,限制python多处理中的总CPU使用率
推荐阅读
- android - 我想从 Google OCR API 读取文本并存储在数据库中
- typescript - 在模块的打字稿中声明接口
- c - 无法将元素存储在链表中
- regex - bash / sed:修剪指定字符的第一个和最后一个序列
- codeigniter - 在 plesk 服务器 Codeigniter 邮件功能不能在服务器端使用 gmail 但在 localhost 中很好?
- excel - 更新范围请求返回 200 OK 但不更新 Excel 工作表
- node.js - 数据在 mongodb 中插入两次
- javascript - Microsoft Edge 浏览器中的 range.endOffset 给出了错误的值
- cuda - 部分代码的 CUDA 分析信息
- qt - 缺少向导按钮