2017-04-21 54 views
-2

我有一個Oracle查詢將返回我約300萬行看起來是這樣的:蟒蛇 - multiprocessing.dummy池功能imporve查詢執行時間

select key from table;---just one column 

我試圖讓該並聯執行在python

import threading 
local = threading.local() 

def execute_query: 
    if not hasattr(local, 'db'): 
     local.db = params.get('conn') 
     cursor = local.db.cursor() 
     cursor.execute(params.get('sql')) 
     return cursor.fetchall() 

使用泳池對象從multithreading.dummy模塊,得到並行執行上述Oracle查詢我做:

def __call__(self): 
    pool = Pool(10) 
    data = pool.apply(execute_query, [{ 'conn' : self._connection, 'sql': self._sql }]) 

    pool.close() 
    pool.join() 

我知道pool objectapply method只在其中一個工作線程中執行傳遞的函數。

有沒有什麼辦法可以讓這個execute_query在多個線程間執行以提高性能?

+0

爲什麼做,如果你想用你使用''multithreading.dummy' multiprocessing'?重讀它:https://docs.python.org/3.6/library/multiprocessing.html#module-multiprocessing.pool – stovfl

+0

產卵過程涉及比產卵線程更多的開銷,另外我想使用apply()和map ()方法的池對象。 multiprocessing.dummy複製多處理的API,但不過是線程模塊的一個包裝。 – abhi1489

回答

0

問題:我試圖讓這個並行執行。

apply(func[, args[, kwds]]) 

Call func with arguments args and keyword arguments kwds. 
It blocks until the result is ready. 
Given this blocks, apply_async() is better suited for performing work in parallel. 
Additionally, func is only executed in one of the workers of the pool.