7

我将 Process 类子类化为我称为 EdgeRenderer 的类。我想使用multiprocessing.Pool,除了常规进程之外,我希望它们成为我的 EdgeRenderer 的实例。可能的?如何?

4

3 回答 3

3

从杰西诺勒:

API 目前不支持它,但不会是一个糟糕的添加。本周我将考虑将其添加到 python2.7/2.6.3 3.1

于 2009-04-12T14:24:46.590 回答
3

这似乎有效:

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)
于 2016-12-01T18:50:06.840 回答
2

我在 API 中看不到任何钩子。您可能可以通过使用initializerinitargs参数来复制您想要的功能。或者,您可以将功能构建到用于映射的可调用对象中:

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)
于 2009-04-12T01:26:06.977 回答