7

Process クラスを、EdgeRenderer というクラスにサブクラス化しています。を使用したいのですがmultiprocessing.Pool、通常のプロセスの代わりに、それらを EdgeRenderer のインスタンスにしたいのです。可能?どのように?

4

3 に答える 3

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 にはフックがありません。initializerandinitargs引数を使用して、目的の機能を複製することで回避できる場合があります。または、マッピングに使用する呼び出し可能なオブジェクトに機能を組み込むことができます。

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 に答える