-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