2015-01-09 92 views
0

晚上好,通过10重复处理500个事件10?

我想同时运行一个像500进程的东西,并决定写一个管理工作的池。然而,它很沉重,内存看起来不像它会处理它。 任何建议打开/使用一个池,将执行10或50或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() 

通常特效的数量是500左右的功能get_file_mp颇重,因此当一切都在内存中,电脑遭受了很多。这就是为什么我希望有一种方法来执行这些过程10乘10或50乘50,因为我注意到计算机能够处理这种工作量。

+0

Python有一个多处理池,可以为您管理所有事情。检查https://docs.python.org/2/library/multiprocessing.html。我不清楚你如何试图运行500个进程。请详细说明。 – Aziz

回答

0

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

  • 事件队列线程是您的500个进程向其发送事件的地方。一旦它获得了一个它睡觉的事件。
  • 事件队列线程将等待作业到达阈值或上次事件调度发生的时间。你的门槛将是10或50或任何你想要的。
  • 在达到这个阈值或时间它会批10或50事件,并将它们传递给工作分派线程,睡觉去再次
  • 你的事件调度线程会遍历事件,并呼吁每一个处理程序,然后再次入睡。

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

+0

Thanks.Sounds聪明。 为什么你不建议批量?你会如何尝试优化?我真的寻找可以优化的小循环,但记忆不像我所有。我必须说,我对编程还是一个新鲜的东西,所以任何想法或建议对我来说都是件好事:) –

+0

不客气。不推荐批处理的原因是因为它更复杂,增加了更多的代码,在事件处理中引入了延迟,并且集中了使用和处理内存以及平滑内存 – hhafez