Я кодирую генератор набора Мандельброта и распараллелил его с 4 подпроцессами, каждый из которых вычисляет свою область набора Мандельброта.
Код распараллеливания следующий:
def run_threads(self): # Parallelize calcs with 4 subprocesses
with Pool(processes=4) as pool:
p1 = pool.apply_async(self.run, (0, int(self.width / 2), 0, int(self.width / 2)))
p2 = pool.apply_async(self.run, (0, int(self.width / 2), int(self.width / 2), self.width))
p3 = pool.apply_async(self.run, (int(self.width / 2), self.width, 0, int(self.width / 2)))
p4 = pool.apply_async(self.run, (int(self.width / 2), self.width, int(self.width / 2), self.width))
r1 = (p1.get(timeout=10))
r2 = (p2.get(timeout=10))
r3 = (p3.get(timeout=10))
r4 = (p4.get(timeout=10))
#r2 = self.run(0, int(self.width / 2), int(self.width / 2), self.width)
for i in range(0, int(self.width / 2)):
for j in range(0, int(self.width / 2)):
self.values[i, j] = r1[i,j]
for i in range(0, int(self.width / 2)):
for j in range(int(self.width / 2), self.width):
self.values[i, j] = r2[i,j]
for i in range(int(self.width / 2), self.width):
for j in range(0, int(self.width / 2)):
self.values[i, j] = r3[i,j]
for i in range(int(self.width / 2), self.width):
for j in range(int(self.width / 2), self.width):
self.values[i, j] = r4[i,j]
но вывод равен this
Две правильно представленные области соответствуют r1 и r4, поэтому r2 и r3 не работают должным образом.Если я запускаю закомментированный код для r2, вывод теперь правильный, поэтому я не знаю, что я делаю неправильно.
PS: self.values и значения - цвет каждого пикселя.
Спасибо