многопроцессорный процесс не изменит атрибуты объекта - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь реализовать следующий код с помощью пакета многопроцессорной обработки -

 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, но могу сказать наверняка. Помощь и понимание будут высоко оценены!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...