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

时间:2014-03-05 09:03:15

标签: python eventlet

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

threading.Semaphore是否正确使用了Monkey_patch并且可以在gunicorn中使用eventlet?

1 个答案:

答案 0 :(得分:1)

据我了解问题:

  • 一个枪炮过程(这是至关重要的)产生N个绿色线程
  • 每个工人可以产生一个或多个子流程
  • 您想限制子流程总数

在这种情况下,是的,信号量将按预期工作。

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

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

管理员从gunicorn中侦听作业,如果需要可以生成子进程,可能会重用现有的子进程。您可能喜欢像Beanstalk,Celery,Gearman这样的作业队列系统。或者您可能希望在现有的消息传输(如NSQ,RabbitMQ,ZeroMQ)之上构建自定义解决方案。

相关问题