2012-07-26 52 views
1

使用多线程和我的计划是这样的:最大CPU效率

function(1) 
function(2) 
... 
function(100) 

执行功能大约需要30分钟,100%的CPU,所以执行程序需要花费大量的时间。这些函数访问同一个文件进行输入,做了很多数学计算并打印结果。

会介绍多线程减少时间,程序需要完成(我在多核机器上工作)?如果是这样,我应该使用多少个线程?

谢谢!

+1

这取决于瓶颈在哪里。你是否反复读/写文件?你能一次完成所有的阅读/写作吗? – 2012-07-26 16:15:14

+1

这取决于这些功能也在做什么。如果函数2依赖于函数1的输出,那么你可以做的事情就不多了。 这里有一些很好的调度程序(不确定特别是python的具体情况),它们很好地允许多个作业并行运行,但这取决于依赖和瓶颈的位置。 – Liron 2012-07-26 16:17:33

+1

多任务处理主要用于CPU绑定任务 – 2012-07-26 16:21:35

回答

1

这取决于。

如果没有一个函数完全依赖于对方,那么当然可以在单独的线程上运行它们(甚至可以使用multiprocessing来避免全局解释器锁定)。您可以为每个核心运行一个进程,也可以运行100个进程或两者之间的任意数量,具体取决于系统的资源限制。 (如果您不拥有该系统,则某些管理员不喜欢垃圾邮件处理表的用户。)

如果函数必须一个接一个地运行,那么您不能这样做。您必须重新构建程序以尝试隔离独立任务,或者接受您可能有P-complete(难以并行)问题并继续前进。

+1

这些功能是完全独立的。 – user1492295 2012-07-26 16:25:14

+0

然后,你会想看看http://docs.python.org/library/multiprocessing.html - 该模块应该有你在找什么。只要你的任务是CPU限制的而不是IO限制的,你应该看到一些加速。 – atomicinf 2012-07-26 16:29:35

+0

+1多处理。就使用的进程数量而言,假设您受CPU限制,请尽可能多地使用核心。 – user1277476 2012-07-26 16:34:06