2014-09-10 67 views
-1

我有一个需要大约1分钟执行的python函数。我需要为我的数据库中的每个用户运行它。什么是最短时间执行的最佳方式? (假设我不能减少执行时间)。我应该为每个用户分配多个线程吗? (我无法控制用户数量)。执行慢速功能的最佳方法是什么?

回答

2

假设你的慢作用是缓慢的,因为它是CPU密集型的,产卵为每个用户一个线程可能是一个危险的,如果你有一个大的数据库,你将可能有数千个线程争夺资源的。您可以使用multiprocessing.Pool有工人池:

from multiprocessing import Pool 

def f(user): 
    # do something 

users = ['Alice', 'Bob', 'Carol', 'Dave'] 
pool = Pool(processes=10) 
results = pool.map(f, users) 

即使users原来是一千名的列表,你将永远有一个最大的10个进程同时运行。您应根据您的机器具有的核心数设置进程数。

+0

如果我的FN是不是CPU密集型和等待多个数据库查询什么? – ravi 2014-09-10 10:58:07

+0

@ravi本地数据库查询?因为这是CPU密集型 – 2014-09-10 10:59:32

+0

@ravi甚至远程查询是CPU密集型(服务器),同时运行大量的查询时,你可能会失去效率。使用参数'processes'玩你的设置找到一个好的数字。 – 2014-09-10 11:10:35

相关问题