Nei*_*eil 6 python celery gevent eventlet
我的主 celery 应用程序在 AWS 的 EC2 实例(“main”)中运行,它生成的任务与同一可用区(“db”)中的 RDS 数据库进行交互。工作负载每分钟生成多达数千个任务,我需要尽快并行执行它们。我有工作人员在两个物理位置执行任务。一个来自主实例的单独 EC2 实例(“工作 EC2”),但与它和数据库位于同一可用区,另一个来自我们办公室私有数据中心的物理计算机(“工作本地”)。
工作 EC2 和本地都运行 prefork 事件池并且autoscale==70,4工作正常(任务在 2-3 秒内完成),但 CPU 和内存使用率很高,如果可能的话,我需要更多的并行性。所以我一直在尝试eventlet和。我陷入以下问题:geventconcurrency=100
BrokenPipe。注意,这种情况不会发生在 prefork 上,所以我认为这不是连接/网络的问题,而是与池包有关。这种行为对于 Gevent 来说比 Eventlet 更糟糕,但两者都不好问题:
为什么 Eventlet 和 Gevent 在本地和 EC2 工作线程之间的表现会不同?这两个工作人员之间的唯一区别在于,其中一个工作人员在物理上更接近主芹菜应用程序和数据库,这会影响绿色线程的执行方式吗?
如何让Eventlet真正利用完整的并发设置?
为什么 Gevent 需要这么长时间才能访问内存缓存?
如何让远程工作人员上的 Eventlet/Gevent 持续消耗任务?
注意:使用 prefork 的相同工作人员在完全相同的设置下不会出现这些问题。prefork 的唯一问题是,即使并发数为 70,工作机器的 CPU 和内存也会承受很大的负担,我希望它接近 700。
| 归档时间: |
|
| 查看次数: |
2724 次 |
| 最近记录: |