Многопроцессорная обработка Python: пул пользовательских процессов - PullRequest
6 голосов
/ 12 апреля 2009

Я подклассифицирую класс Process в класс, который я называю EdgeRenderer. Я хочу использовать multiprocessing.Pool, за исключением того, что вместо обычных процессов я хочу, чтобы они были экземплярами моего EdgeRenderer. Возможный? Как?

Ответы [ 3 ]

3 голосов
/ 12 апреля 2009

От Джесси Ноллера:

В настоящее время не поддерживается в API, но не будет плохим дополнением. Я посмотрю на добавление его в python2.7 / 2.6.3 3.1 на этой неделе

2 голосов
/ 01 декабря 2016

Это похоже на работу:

import multiprocessing as mp

ctx = mp.get_context()  # get the default context

class MyProcess(ctx.Process):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        print("Hi, I'm custom a process")

ctx.Process = MyProcess  # override the context's Process

def worker(x):
    print(x**2)

p = ctx.Pool(4)
nums = range(10)
p.map(worker, nums)
2 голосов
/ 12 апреля 2009

Я не вижу никакой ловушки для этого в API. Вы можете избежать репликации нужной вам функциональности, используя аргументы initializer и initargs. Кроме того, вы можете встроить функциональность в вызываемый объект, который вы используете для отображения:

class EdgeRenderTask(object):
    def op1(self,*args):
        ...
    def op2(self,*args):
        ...
p = Pool(processes = 10)
e = EdgeRenderTask()
p.apply_async(e.op1,arg_list)
p.map(e.op2,arg_list)
...