您可以使用多處理池來創建用於提高性能的進程。比方說,你有一個處理圖像的函數handle_file。如果你使用迭代,它最多隻能使用一個核心的100%。爲了利用多個內核,池多處理爲您創建子進程,並將任務分配給它們。下面是一個例子:
import os
import multiprocessing
def handle_file(path):
print 'Do something to handle file ...', path
def run_multiprocess():
tasks = []
for filename in os.listdir('.'):
tasks.append(filename)
print 'Create task', filename
pool = multiprocessing.Pool(8)
result = all(list(pool.imap_unordered(handle_file, tasks)))
print 'Finished, result=', result
def run_one_process():
for filename in os.listdir('.'):
handle_file(filename)
if __name__ == '__main__':
run_one_process
run_multiprocess()
run_one_process是處理數據的單核心方式,很簡單,但速度很慢。另一方面,run_multiprocess創建8個工作進程,並將任務分配給它們。如果您擁有8個內核,速度將提高8倍。我建議你將工號設置爲核心數的兩倍或者核心數。你可以試試看看哪種配置更快。
對於高級分佈式計算,您可以使用ZeroMQ作爲larsmans提到的。起初很難理解。但是一旦你理解了它,你可以設計一個非常高效的分佈式系統來處理你的數據。就你而言,我認爲有多個REP的REQ會足夠好。
希望這將是有益的。
可能重複的[如何使用Windows 7中的所有核心?](http://stackoverflow.com/questions/3055696/how-to-use-all-the-cores-in-windows-7) – 2012-04-04 14:22:10
如果你已經有了一個工作腳本,你可以指向任何你想要的文件/目錄,可以考慮編寫一個shell腳本來啓動儘可能多的實例。 – 2012-04-04 14:23:51
我首先看看瓶頸在哪裏。如果你花大量的時間來執行IO,那麼你將無法做得更快。例如,如果一個進程設法以一定的速度從磁盤加載數據,那麼當多個進程正在咀嚼磁盤時,你很難保持這個速度。 – 2012-04-04 14:24:28