エラー\例外がある場合はすべてのプロセスを\ killする必要があります。私はpsutil
を使用してすべてのプロセスを殺すためにStackOwerflowソリューションで見つけましたが、時々私は問題を抱えています - psutil
が子プロセスとメインプロセスを終了すると、新しいプロセスが開始し、多重処理で一度に生成されたすべてのプロセスを強制停止します。プール
import psutil
class MyClass:
parent_pid = 0
ids_list = range(300)
def main(self):
self.parent_pid = os.getpid()
pool = multiprocessing.Pool(3)
for osm_id in self.ids_list:
pool.apply_async(self.handle_country_or_region,
kwds=dict(country_id=osm_id),
error_callback=self.kill_proc_tree)
pool.close()
pool.join()
def kill_proc_tree(self, including_parent=True):
parent = psutil.Process(self.parent_pid)
children = parent.children(recursive=True)
for child in children:
child.kill()
psutil.wait_procs(children, timeout=5)
if including_parent:
parent.kill()
parent.wait(5)
def handle_country_or_region(self, country_id=None, queue=None):
pass
# here I do some task
(すなわちずに「私がプールを終了するのではなくプロセスをkillする必要があるようですが、この場合には、私は
pool.close()
pool.terminate()
pool.join()
をすれば、私の端末が何をやって停止し、新しいラインが完全に空であります>>> ")、何も起こりません。
理想的には、次の流れが必要です。エラー\例外がある場合は、すべてのコード実行を停止し、ターミナルの対話型プロンプトに戻ります。
誰でも私を正常に動作させるのに役立つことができますか? 私はPython 3.5とUbuntu 15.10を使用しています
あまりにも悪い私はこれをPython 2で行うことができません: –
@Adi、申し訳ありません、私はPython 2で動作しませんでしたので、助けにはなりません。 'Python 2.7.12'で' '私が使ったすべてのメソッド - https://docs.python.org/2/library/ multiprocessing.html – TitanFighter
python2にerror_callbackは存在しません。 –