Я пытаюсь реализовать следующий код с помощью пакета многопроцессорной обработки -
from multiprocessing import Process from manna_1D import Lattice,info
import numpy as np import time
L = 2**3 N = 2**4 propagation_time = 3 cores = 1
lattice = Lattice()
if __name__ == '__main__':
#info('main line')
lattice.set_length(L)
# initialize lattice
print("initialization process")
for p in range(cores):
print("started %s process" % int(p+1))
p = Process(target=lattice.add_particles, args=(N,))
p.start()
p.join()
print(lattice.sites)
У меня также есть класс решетки -
import os #for processing analysis
def info(title):
print(title)
print('module name:', __name__)
print('parent process:', os.getppid())
print('process id:', os.getpid())
import numpy as np
class Lattice:
sites = []
length = 0
def __init__(self):
self.sites = [0]*self.length
def set_length(self,length): #setting a length initalizes all the sites values to zero
self.length=length
self.sites = [0]*self.length
def add_particles(self,n):
if (self.length > 0):
print(info("add %s particles" % n))
for p in range(n):
loc = np.random.randint(self.length-1)
self.sites[loc]+=1
print(loc,self.sites[loc])
else:
print("cannot add particles on a lattice without sites")
Проблема в том, что когда я запускаю main.py, я получаю следующий вывод:
initialization process
started 1 process
add 16 particles
('module name:', 'manna_1D')
('parent process:', 17850)
('process id:', 29319)
None
(2, 1)
(3, 1)
(0, 1)
(1, 1)
(2, 2)
(6, 1)
(6, 2)
(6, 3)
(0, 2)
(6, 4)
(4, 1)
(5, 1)
(4, 2)
(5, 2)
(4, 3)
(4, 4)
[0, 0, 0, 0, 0, 0, 0, 0]
, который показывает в кортежах, к какой части сайта добавлены частицы слева, и количество частиц, которые в данный момент находятся в этой области справа. В конце выводится количество частиц на каждом участке. Это показывает, что все сайты пусты.
Я считаю, что это какое-то неправильное использование объекта Process, но могу сказать наверняка. Помощь и понимание будут высоко оценены!