Как я могу использовать многопроцесскую в Python для выполнения миллионов сравнений?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу использовать многопроцесскую в Python для выполнения миллионов сравнений?

Сообщение Anonymous »

Моя цель - провести сравнение между двумя разными состояниями класса Rubiks Cube, которое само по себе просто. Проблема возникает, когда вам нужно вычислить что -то по порядку 900 миллионов сравнений, чтобы пройти все из них. Для справки, мы сравниваем, что 2 кубика из 2 разных списков точно одинаковы. < /P>
Решения, которые я пробовал до сих пор, следующие: < /p>

[*] Bruteforce Comparrisons < /li>
Объект пула с использованием многопроцессов (для множества множества) < /li>
Список более простых операций для мультипроцесса пула (вызвала проблему с памятью)
Настройка количества процессов пула и/или рассыпать PrettyPrint-Override ">print("Beginning pooling, with a new pool for each start pair. This may take a while...")
final_algs=[]
startcomparisons=0
for pairA in startcube_pairs:
comparisonlist=[]
startcomparisons+=1
print(f"Starting comparison block {startcomparisons}/{len(startcube_pairs)}")
for pairB in solvedcube_pairs:
comparisonlist.append([pairA, pairB])
# now we have a small list of comparisons to make, and we will start comparing what we currently have. If we just put all possible pairs in a list, we encounter a memory problem.
with Pool() as pool:
results = pool.imap_unordered(comparecubes_returnsolution_ifexists, comparisonlist, chunksize=4096)
# imap_unordered means the processes will not necessarily start in order, which is fine since we don't care what order we get algorithms out

for result in results: # this portion existing shows all the subprocesses in the task manager so we will keep it
if result != None:
print(f"Found: [{alg_as_str(result)}] length: {len(result)}")
final_algs.append(result)
else: pass
print(f"Finished comparison block {startcomparisons}/{len(startcube_pairs)}\n\n")
< /code>
С этой версией кода процесс Python и его подпроцессы в совокупности используют только 7-9% ЦП, причем большинство работников из пула используют менее 0,5% моего процессора. Моя цель состоит в том, что если бы я смог лучше использовать многопроцесскую, я смог бы использовать целевую 40-60% моего процессора при выполнении этих сравнений. Если это так, могу ли я позволить Python выделять большую мощность обработки, не набрасывая память моей системы?>

Подробнее здесь: https://stackoverflow.com/questions/794 ... omparisons
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как я могу использовать многопроцесскую в Python для выполнения миллионов сравнений?
    Anonymous » » в форуме Python
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Как я могу безопасно использовать многопроцесскую в приложении Django?
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Оптимизация многокритериальных сравнений с большими кадрами данных в Python
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Как наборы и наборы сравнений работают в Python?
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Как наборы и наборы сравнений работают в Python? [дублировать]
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»