多处理 500 个事件 10 x 10?

Multiprocesing 500 events 10 by 10?

大家晚上好,

我想同时运行大约 500 个进程,因此决定编写一个管理工作的池。然而,它非常重,内存看起来无法处理它。 对 open/use 将执行进程 10 x 10 或 50 x 50 的池有何建议? 谢谢

这是我现在处理的方式。

def get_data_mp(args):
    settings = args

    procs = len(settings.ticker_list)
    pool = multiprocessing.Pool(procs)
    tickers = pool.map(get_file_mp, [(settings,i) for i in range(procs)])
    pool.close()
    pool.join()

通常procs 的数量在500 左右。函数get_file_mp 非常重,因此当所有内容都在内存中时,计算机会受到很大影响。这就是为什么我希望有一种方法来执行这些进程 10 x 10 或 50 x 50,因为我注意到计算机能够处理这种工作负载。

我会创建两个线程,一个是事件队列线程,另一个是事件派发线程。

  • 事件队列线程是您的 500 个进程将事件发送到的地方。一旦有事件发生,它就会休眠。
  • 事件队列线程将等待,直到达到作业阈值或距离上次事件分派的时间已经发生。您的阈值可以是 10 或 50 或任何您想要的。
  • 达到此阈值或时间后,它将批处理 10 或 50 个事件并将它们传递给作业调度线程并再次进入休眠状态
  • 您的事件分派线程将遍历事件并为每个事件调用处理程序,然后再次进入休眠状态。

那是如果你真的想批处理事件,我个人宁愿不批处理它们并尝试在 "real time" 中优化它们的执行。