파이썬에서 다중 처리를 사용하는 방법을 배우려고합니다. 이 나는 약 multiprocessing을 읽고, 나는이 같은 일을하려고 : 나는 보로 노이 다이어그램을 생성하는 방법에는 다음 클래스 (부분 코드), 한병렬 처리 - 풀 - 파이썬
을 : 나는를 생성하는
class ImageData:
def generate_voronoi_diagram(self, seeds):
"""
Generate a voronoi diagram with *seeds* seeds
:param seeds: the number of seed in the voronoi diagram
"""
nx = []
ny = []
gs = []
for i in range(seeds):
# Generate a cell position
pos_x = random.randrange(self.width)
pos_y = random.randrange(self.height)
nx.append(pos_x)
ny.append(pos_y)
# Save the f(x,y) data
x = Utils.translate(pos_x, 0, self.width, self.range_min, self.range_max)
y = Utils.translate(pos_y, 0, self.height, self.range_min, self.range_max)
z = Utils.function(x, y)
gs.append(z)
for y in range(self.height):
for x in range(self.width):
# Return the Euclidean norm
d_min = math.hypot(self.width - 1, self.height - 1)
j = -1
for i in range(seeds):
# The distance from a cell to x, y point being considered
d = math.hypot(nx[i] - x, ny[i] - y)
if d < d_min:
d_min = d
j = i
self.data[x][y] = gs[j]
이 이 다이어그램이 많기 때문에 많은 시간을 소비하므로이 문제가 병렬 처리되는 전형적인 문제라고 생각했습니다. 그렇지도에 작동하지 않는 외에,
if __name__ == "__main__":
entries = []
seeds = np.random.poisson(100)
p = Pool()
entry = ImD.ImageData(width, height)
res = p.apply_async(entry.generate_voronoi_diagram,(seeds))
entries.append(entry)
entry.generate_heat_map_image("ImagesOutput/Entries/EntryX")
그러나 : 내가 같이, "정상적인"방식에서,이 일을했다 :
if __name__ == "__main__":
entries = []
for n in range(images):
entry = ImD.ImageData(width, height)
entry.generate_voronoi_diagram(seeds)
entry.generate_heat_map_image("ImagesOutput/Entries/Entry"+str(n))
entries.append(entry)
이 병렬화하려고, 나는이 시도 단일 다이어그램을 생성 할 때,이 방법을 N 번 수행해야한다고 지정하는 방법을 알지 못합니다.
도움이 될 것입니다. 감사합니다. .
Huuum, 감사합니다. 하지만 "AttributeError : 'Pool'객체에 'starmap_async'속성이 없습니다. 그러나 참조를 보면이 방법을 찾을 수 있습니다. – pceccon
그래, 실제로 필자는 파이썬 3을 설치하지 않았다. 왜냐하면 matplotlib와 같이 내가 사용해야 할 다른 것들은 전혀 작동하지 않는 것들을 가지고 있기 때문이다. 다른 방법으로 할 수 있습니까? 게다가, 씨앗은 모든 voronoi 다이어그램에 고유합니다. 이것은 사이트의 수를 나타냅니다. – pceccon
@pceccon : 아,'starmap' 메쏘드는 파이썬 3에만있는 것처럼 보입니다.파이썬 2에서'map_async' 메쏘드를 사용할 수 있지만,'entry'와'seed' 값을 얻기 위해 함수 본문에서 언팩 한 2 튜플을 받아들이도록'do_voroni' 함수를 변경해야합니다 :'' def do_voroni (tup) : 항목, 시드 = tup; ...' – Blckknght