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

Это должно перейти в группу [code-review] (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

Я думаю, что эти изменения не будут отличаться, потому что условие «если ........:» редко выполняется, я изменил вопрос и поместил весь код, желаю вам решения @BrianMalehorn – Anasjm

+0

Ах, вы Верно. Ваша настоящая проблема заключается в следующем: 'комбинации (диапазон (h), 10)'. 60 выберите 10 = 75 390 0227 566. В этом списке 75 миллиардов вещей, это слишком много, чтобы перебирать (python может перебирать около 1 миллиона вещей/секунду). –

Смежные вопросы