0

我的python代碼的執行速度太慢,我有7個處理器和python只使用一個,我剛剛發現多處理選項,但我不知道如何使用它,所以你可以修改我的下面的代碼使用這個選項?多處理和python代碼

from itertools import combinations 

def New5(A,C5): 
    d=True 
    for a in A: 
     if(d==True): 
      d=(a not in C5) 
    return d 

def refcomb10(h): 
    T=[] 
    C5={0} 
    b=0 
    C10=combinations(range(h),10) 
    for S in C10: 
     A=combinations(S,5) 
     if(New5(A,C5)): 
      A=combinations(S,5) 
      for a in A: 
       C5.update({a}) 
      T.append(S) 
      b+=1 
      print(b,S) 
    return([T,C5]) 

U=refcomb10(60) 

原諒我的英語

+0

這應該移動到[代碼審查](http://stackoverflow.com/questions/tagged/code-review)組。 – Prune

+0

你能解釋一下這個函數在做什麼嗎?因爲它看起來真的非常低效(你的例子通過迭代「C(100,10)* C(10,5)」等於超過4.3萬億次可能性)。 –

+0

......以每秒百萬組合的速度,完成大約需要138年的時間。 *找到更好的算法*幾乎可以肯定比*更快速地*更好。 –

回答

0

你可能並不需要多線程解決您的性能問題。這些改進可能更有幫助:

  • 刪除print(b,S)
  • 刪除第二個A=combinations(S,5),如果可能的話
  • 更換

    for a in A: 
        C5.append(a) 
    

    C5.extend(A) 
    
  • 分析代碼,也許喜歡這個: https://docs.python.org/2/library/profile.html。找出哪些功能比較慢,並儘量加快速度。
+0

我認爲這些變化不會產生任何效果,因爲條件「if ........:」很少滿足,我修改了問題並放置了整個代碼,祝您有個解決方案@BrianMalehorn – Anasjm

+0

啊,你對了。你真正的問題是這樣的:'組合(範圍(h),10)'。 60選擇10 = 75,394,027,566。這個列表中有750億個事物,這太多了,無法迭代(python可以迭代大約100萬次/秒)。 –