Я хочу вычислить сложную задачу io-bond, которая использует Интернет, а затем сохранить результат в 2d-массиве, в режиме одного процесса это может занять много дней.
я пошел, чтобы сделать его многопроцессорным путем обновления строки в каждом процессе.
class MatrixData:
def __init__(self, size):
self.size = size
self.dist_matrix = [[0.0] * size] * size
self.last_not_given_row = 0
self.last_save = 0
self.resolved_list = mp.Array('b', [False] * size)
def save_row(self, row_index, data, lock):
lock.acquire()
try:
print('lock')
self.last_save= self.last_save + 1
if self.last_save % 2 == 0:
self.save_file()
self.resolved_list[row_index] = True
for i in range(self.size):
self.dist_matrix[row_index][i] = data[i]
finally:
print('unlock')
lock.release()
Я использую некоторые другие параметры, такие как last_save
, чтобы сохранить его в файл в течение небольших периодов.
Я использую блокировки для обеспечения безопасности процесса, но когда я запускаю процесс, он освобождает пространство и портит данные.
lock = mp.Lock()
for i in range(12):
p = mp.Process(target=worker, args=(data_calculator, MatrixData_obj))
p.start()
plist.append(p)
for p in plist:
p.join()