我有一个启动工作进程的 python(2.6.5 64 位,Windows 2008 Server R2)应用程序。父进程将作业放入作业队列中,工作人员从中获取作业。类似地,它有一个结果队列。每个工作人员通过查询服务器来执行其工作。工作人员的 CPU 使用率较低。
当工作线程数量增加时,服务器上的 CPU 使用率实际上会减少。服务器本身不是瓶颈,因为我可以从其他应用程序进一步加载它们。
还有其他人看到过类似的行为吗?当大量进程读取或写入同一队列时,Python 多处理队列是否存在问题?
最佳答案
关于性能限制的两种不同想法:
- 瓶颈在于工作线程与父进程之间相互争斗,争夺作业队列的访问权。
- 瓶颈是服务器上的连接速率限制(syn-flood 保护)。
收集更多信息:
- 分析已完成的工作量:每秒完成的任务,将此作为您的核心性能指标。
- 使用数据包捕获来查看网络事件中的网络级延迟。
- 让您的员工记录他们等待访问作业队列的时间。
可能的改进:
- 让您的工作人员使用持久连接(如果可用/适用)(例如 HTTP)。
- 将任务拆分为多个作业队列,并提供给工作人员池。
关于Python 多处理队列可扩展到大量工作线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7822207/