2014-12-19 76 views
0

我想弄清楚如何使用python的多處理(或其他一些python庫)來加速搜索。我目前使用Python 3.4.2。下面是我已經建立了我的搜索和發現(我的實際代碼是什麼,否則,但是示例代碼是一個準確的站在):使用多處理來加速搜索

import random 
def search(): 
    nums = list(range(1000)) # use a smaller range to test code 
    random.shuffle(nums) 
    if {1, 3, 13} - set(nums[:20]) == set(): # some random hard-coded search 
     return nums 
    return None 

def find(): 
    res = None 
    while res is None: 
     res = search() 
    return res 

>>>find() 
[56, 46, 71, 65, 47, 13, 96, 1, 3, 7, 16, 17, 28, ... 

不用說,我可以寫搜索作爲單一功能。我可以並行搜索嗎?也就是說,我可以在多個處理器上啓動search,並且一旦某個處理器返回非None結果,就會暫停搜索。我該怎麼做呢? (另外,我沒有使用OpenMP,使用Yosetime和全部,也不想安裝gcc)。

(我一直在試圖找到一個很好的教程,文章等的幫助,所以引用任何資源將是非常有益的)。

+1

你試圖在您的流程中平均分配0-1000的數字? – inspectorG4dget 2014-12-19 00:21:14

回答

2

,而不必每次(這可以得到昂貴的)產生一個新的過程中,爲什麼不換一個while True函數體,然後殺死該功能時任何進程提供了一個有用的結果:

import random 
import multiprocessing as mp 

def search(qOut): 
    while True: 
     nums = list(range(1000)) # use a smaller range to test code 
     random.shuffle(nums) 
     if {1, 3, 13} - set(nums[:20]) == set(): # some random hard-coded search 
      qOut.put(nums) 

def find(): 
    q = mp.Queue() 
    numProcs = mp.cpu_count() -1 # one per processor 
    procs = [mp.Process(target=search, args=(q,) for _ in range(numProcs)] 
    for p in procs: 
     p.start() 

    res = q.get() 
    print("Got a result") 

    for p in procs: 
     p.terminate() 
+0

感謝您提供直接的代碼示例,以及有關如何爲搜索構建代碼的說明。 – Cole 2014-12-19 15:22:41