マルチプロセッシングモジュールではなく、python3でパススルーで非デーモンプロセスを実装するにはどうしたらいいですか?Python pathosプロセスプール非デーモンですか?
具体的には、私はを参照しています:この投稿への答えはマルチプロセッシングモジュールを介して非鬼神のプロセスを実装し Python Process Pool non-daemonic?
。残念ながら、このモジュールは、他のオブジェクト間ラムダ機能を酸洗いすることはできませんが、哀愁は、Python 2で行います
#import multiprocessing
#import multiprocessing.pool
import pathos
#class NoDaemonProcess(multiprocessing.Process):
class NoDaemonProcess(pathos.multiprocessing.Pool.Process):
def _get_daemon(self):
return False
def _set_daemon(self, value):
pass
daemon = property(_get_daemon, _set_daemon)
#class NoDaemonPool(multiprocessing.pool.Pool):
class NoDaemonPool(pathos.multiprocessing.Pool):
Process = NoDaemonProcess
def myproc(args):
i, max_workers = args
#pool = multiprocessing.Pool(max_workers)
pool = pathos.pools.ProcessPool(max_workers)
l_args = [j for j in range(i)]
mysubproc = lambda x : x
print("myproc", l_args, pool.map(mysubproc, l_args))
return i
max_workers = [2, 1]
executor = NoDaemonPool(max_workers[0])
#executor = pathos.multiprocessing.Pool(max_workers[0])
l_args = [(i, max_workers[1]) for i in range(10)]
print(executor.map(myproc, l_args))
出力:
('myproc', [], [])
('myproc', [0, 1], [0, 1])
('myproc', [0], [0])
('myproc', [0, 1, 2], [0, 1, 2])
('myproc', [0, 1, 2, 3], [0, 1, 2, 3])
('myproc', [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5])
('myproc', [0, 1, 2, 3, 4], [0, 1, 2, 3, 4])
('myproc', [0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 4, 5, 6])
('myproc', [0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 7])
('myproc', [0, 1, 2, 3, 4, 5, 6, 7, 8], [0, 1, 2, 3, 4, 5, 6, 7, 8])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
はPython 3では、哀愁モジュールが変更されたw.r.t. Python 2、例えば pathos.multiprocessing.Pool.Process はもはやクラスではなく、関数であるため、継承のためにこれを使用することはできません(上記を参照)。 - 私が紛失している文書はありますか?
上記のコードをPython 3のpathosで動作させるにはどうすればよいですか?
import multiprocessing
import multiprocessing.pool
import pathos
class NoDaemonProcess(multiprocessing.Process):
#class NoDaemonProcess(pathos.multiprocessing.Pool.Process):
def _get_daemon(self):
return False
def _set_daemon(self, value):
pass
daemon = property(_get_daemon, _set_daemon)
class NoDaemonPool(multiprocessing.pool.Pool):
#class NoDaemonPool(pathos.multiprocessing.Pool):
Process = NoDaemonProcess
def myproc(args):
i, max_workers = args
#pool = multiprocessing.Pool(max_workers)
pool = pathos.pools.ProcessPool(max_workers)
l_args = [j for j in range(i)]
mysubproc = lambda x : x
print("myproc", l_args, pool.map(mysubproc, l_args))
return i
max_workers = [2, 1]
executor = NoDaemonPool(max_workers[0])
#executor = pathos.multiprocessing.Pool(max_workers[0])
l_args = [(i, max_workers[1]) for i in range(10)]
print(executor.map(myproc, l_args))
しかし、この作業は、周りにある:上記の特定の例のための回避策は、一方が単にマルチプロセッシングNoDaemonPool実装にフォールバック、およびデーモンサブプロセスに哀愁を使用することができるよう
ない解決ので (ⅰ)その輸入哀愁とマルチプロセッシング、そしてさらに重要な (ⅱ)MYPROCが代わりに
myproc = lambda x : x
として定義されている場合には、例えば、酸洗いすることはできませんありがとうござい版の両方yはずっと、 ベスト、 セバスチャン
は、より具体的に、人々はあなたが質問をする前に、問題を解決するためにやってみました内容を知っているようにしてください。 –