У меня есть ящик с атомами, около 200k, и я хочу вычислить расстояние между атомами. Это заняло очень много времени без использования параллельного метода. Поэтому я хочу использовать pool.map, чтобы помочь мне в этом. Сначала я нарезал прямоугольник на несколько маленьких ячеек и определил объект ячейки, который содержит информацию обо всех атомах в этой ячейке. Однако, когда мне не удалось передать список объектов ячейки процессу. Я новичок в этой многопроцессорной задаче, может кто-нибудь есть идеи, как это исправить? Вот упрощенный мой скрипт:
class atoms():
def __init__(self):
self.__idx__ = 0 # Has other function to change this idx and coord
self.__coord__ = [x, y, z]
def getIdx(self):
return self.__idx__
class cell():
def __init__(self):
self.__idx__ = 0
self.__atoms__ = [atom1, ...,]
def outInfo(self):
for a in self.__atoms__:
print(a.getIdx())
from multiprocessing import Process, Value, Array
def f(cell_lists):
for c in cell_lists:
print(c.outInfo())
if __name__ == '__main__':
cell_lists = [cell1, cell2, ..., cell8]
p = Process(target=f, args=(cell_lists ))
p.start()
p.join()
Сообщение об ошибке: «PicklingError: Can't pickle: это не тот же объект, что и cell.Cell»