Python Evenlet信号量,如何限制对特定子进程的调用?

Python Evenlet信号量,如何限制对特定子进程的调用?,python,eventlet,Python,Eventlet,我需要创建一个信号量来限制特定子进程的并行计数。我将gunicorn与eventlet workers一起使用,并允许许多同时连接。大多数都在等待远程数据。但是,它们都会在某个时刻进入处理阶段,这涉及到调用子流程。但是,此子进程不应经常并行运行,因为它需要内存/CPU 是否已正确地安装了线程。信号量补丁,并可与gunicorn内部的eventlet一起使用?据我所知,问题是: 一个gunicorn进程(这是至关重要的)会生成N个绿色线程 每个辅助进程可以生成一个或多个子进程 您想限制子进程的总

我需要创建一个信号量来限制特定子进程的并行计数。我将gunicorn与eventlet workers一起使用,并允许许多同时连接。大多数都在等待远程数据。但是,它们都会在某个时刻进入处理阶段,这涉及到调用子流程。但是,此子进程不应经常并行运行,因为它需要内存/CPU


是否已正确地安装了
线程。信号量
补丁,并可与gunicorn内部的eventlet一起使用?

据我所知,问题是:

  • 一个gunicorn进程(这是至关重要的)会生成N个绿色线程
  • 每个辅助进程可以生成一个或多个子进程
  • 您想限制子进程的总数
在这种情况下,是的,信号量将按预期工作

但是,如果您有多个进程,它们将有单独的信号量实例,您将观察更多的子进程。在这种情况下,我建议将子流程职责转移到一个单独的应用程序,在同一台机器上运行,并通过您喜欢的API(RPC/socket/message queue/dbus/etc)调用它。您可以这样设计系统:

user -> gunicorn (any number of processes)
gunicorn -> one subprocess manager
manager -> N subprocesses

经理侦听来自gunicorn的作业,如果需要,生成子流程,可能重用现有子流程。你可能喜欢像豆茎、芹菜、Gearman这样的工作队列系统。或者,您可能希望在现有消息传输(如NSQ、RabbitMQ、ZeroMQ)的基础上构建一个自定义解决方案。

是的,似乎就是这样。Gunicorn实际上正在生成多个进程(每个工作进程一个)。每个工人都有一个唯一的信号量。所以4个工人,信号量计数为2,将我限制为8个进程。