Python 多处理队列可扩展到大量工作线程

标签 python message-queue multiprocessing

我有一个启动工作进程的 python(2.6.5 64 位,Windows 2008 Server R2)应用程序。父进程将作业放入作业队列中,工作人员从中获取作业。类似地,它有一个结果队列。每个工作人员通过查询服务器来执行其工作。工作人员的 CPU 使用率较低。

当工作线程数量增加时,服务器上的 CPU 使用率实际上会减少。服务器本身不是瓶颈,因为我可以从其他应用程序进一步加载它们。

还有其他人看到过类似的行为吗?当大量进程读取或写入同一队列时,Python 多处理队列是否存在问题?

最佳答案

关于性能限制的两种不同想法:

  1. 瓶颈在于工作线程与父进程之间相互争斗,争夺作业队列的访问权。
  2. 瓶颈是服务器上的连接速率限制(syn-flood 保护)。

收集更多信息:

  1. 分析已完成的工作量:每秒完成的任务,将此作为您的核心性能指标。
  2. 使用数据包捕获来查看网络事件中的网络级延迟。
  3. 让您的员工记录他们等待访问作业队列的时间。

可能的改进:

  1. 让您的工作人员使用持久连接(如果可用/适用)(例如 HTTP)。
  2. 将任务拆分为多个作业队列,并提供给工作人员池。

关于Python 多处理队列可扩展到大量工作线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7822207/

相关文章:

Python:在应用程序中包含版本号的最佳实践?

python - 如何在 Django 中的更新/创建/删除 View 上使用 login_required

python - Webapp2 Google App Engine Firebase 导入错误

message-queue - NATS - 只需一个订阅者即可对微服务架构中发布的事件采取行动

RabbitMQ - RabbitMQ 在单个服务器上可以处理多少个队列?

python - 服务器可以发布广播消息来终止工作人员吗?兔子MQ

Python Multiprocessing - 进程数

python - multiprocessing.Pool 与 maxtasksperchild 产生相等的 PID

python - 在 Mac Cocoa 应用程序中使用 Tkinter 框架

python - python中视频帧的多处理