多处理500个事件10乘10?

时间:2015-01-09 01:32:21

标签: python multiprocessing

晚上好,

我想同时运行类似500流程的东西,并决定编写一个管理工作的池。然而它非常沉重,内存看起来不会像它一样处理它。 是否建议打开/使用将按10或50执行过程10的池? 感谢

这是我现在处理的方式。

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()

通常proc的数量大约为500.函数get_file_mp非常重,因此当一切都在内存中时,计算机会受到很多影响。这就是为什么我希望有一种方法将这些过程10或10或50除外50,因为我注意到计算机能够处理这种工作量。

1 个答案:

答案 0 :(得分:0)

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

  • 事件队列线程是您的500个进程将事件发送到的位置。一旦它成为一个事件就会睡觉。
  • 事件队列线程将等待作业阈值到达或发生上次事件发送的时间。您的阈值将是10或50或任何您想要的。
  • 达到此阈值或时间后,它会批处理10或50事件并将它们传递给作业调度线程并再次进入睡眠状态
  • 您的事件调度线程将迭代事件并为每个事件调用处理程序,然后再次进入休眠状态。

如果你真的想要批量处理事件,我个人宁愿不批量处理它们并尝试“实时”优化它们的执行。