多处理 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" 中优化它们的执行。
大家晚上好,
我想同时运行大约 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" 中优化它们的执行。