Как я могу использовать многопроцесскую в 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 распределять большую мощность обработки, не набрасывая память моей системы? PrettyPrint-Override ">from multiprocess import Pool
import math as m
import random

class basicdata:
datavalues=[]
def __init__(self):
self.datavalues = [[[random.randint(1,7) for i in range(3)] for j in range(3)] for k in range(6)]

dataset_1=[basicdata() for i in range(155000)]
dataset_2=[basicdata() for i in range(155000)]

def isdataequal(args):
dataset_1=args[0]
dataset_2=args[1]
isequal=True
for i in range(len(dataset_1)):
for y in range(3):
for x in range(3):
if dataset_1[y][x] != dataset_2[y][x]:
if dataset_1[y][x] != 7: isequal=False # 7 represents a value who's comparison is unimportant to us

if isequal: return dataset_1
else: return None

if __name__ == "__main__":
final_results=[]
print("Beginning comparisons")
for data_1 in dataset_1:
comparisonlist=[]
for data_2 in dataset_2:
comparisonlist.append([data_1.datavalues, data_2.datavalues])

with Pool() as pool:
results = pool.imap_unordered(isdataequal, comparisonlist, chunksize=4096)

for result in results:
if result != None:
final_results.append(result)
else: pass
print(f"Finished a comparison block")

print(final_results)
< /code>
должен быть воспроизводимый код. Интересно, что в этой сокращении версии программы используется 99% мощность процессора для менеджера задач в коротких всплесках, что снижается до ранее указанного менее 0,5% использования между ними. Тем не менее, время для завершения каждого сравнения существенно не отличается. < /P>
Редактировать 2: ответил на некоторые комментарии. Кроме того, я хочу отметить, что все, что я хочу от этого проекта, это для сравнений, чтобы не потребовать буквальных дней для вычисления.

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

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

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

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

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

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

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