Pythonのマルチプロセッシング:カスタム・プロセスのプール
-
09-09-2019 - |
質問
私はEdgeRendererを呼び出すクラスに、Processクラスをサブクラス化しています。私は、私は彼らが私のEdgeRendererのインスタンスになりたい、ではなく、通常のプロセスのを除いて、multiprocessing.Pool
を使用したいです。可能?どのように?
解決
ジェシーNollerから:
これは、現在ではサポートされていません。 APIは、悪いほかではないでしょう。 私はそれを追加することを見てみましょう python2.7 / 2.6.3 3.1この週
他のヒント
私は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)
これが動作しているようです。
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)
所属していません StackOverflow