-1
我有一个需要大约1分钟执行的python函数。我需要为我的数据库中的每个用户运行它。什么是最短时间执行的最佳方式? (假设我不能减少执行时间)。我应该为每个用户分配多个线程吗? (我无法控制用户数量)。执行慢速功能的最佳方法是什么?
我有一个需要大约1分钟执行的python函数。我需要为我的数据库中的每个用户运行它。什么是最短时间执行的最佳方式? (假设我不能减少执行时间)。我应该为每个用户分配多个线程吗? (我无法控制用户数量)。执行慢速功能的最佳方法是什么?
假设你的慢作用是缓慢的,因为它是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个进程同时运行。您应根据您的机器具有的核心数设置进程数。
如果我的FN是不是CPU密集型和等待多个数据库查询什么? – ravi 2014-09-10 10:58:07
@ravi本地数据库查询?因为这是CPU密集型 – 2014-09-10 10:59:32
@ravi甚至远程查询是CPU密集型(服务器),同时运行大量的查询时,你可能会失去效率。使用参数'processes'玩你的设置找到一个好的数字。 – 2014-09-10 11:10:35