私はマルチプロセッシングモジュールとデコレータを学習しようとしています。Pythonマルチプロセッシング子プロセス自己終了とPickleError
from time import sleep
from multiprocessing import Process
class async:
def __init__(self, function):
self.func = function
def __call__(self, *args, **kwargs):
p = Process(target = self.func, args = args, kwargs = kwargs)
p.start()
@async
def printA():
sleep(1)
print("A")
def main():
printA()
printA()
printA()
#do more work
if __name__ == "__main__":
main()
今私は
PicklingError: Can't pickle <function printA at 0x00000273F97FF1E0>: it's not the same object as __main__.printA
取得しています、私はこの問題を解決するかどうかはわかりません。私は以下のコードについて2つの質問があります。私はこれが私の仕事用のUNIXマシン上で動作していたように感じます、それはWindowsのものですか?子プロセスが完了すると自己終了するようにします。私は最後に
sys.exit()
の関数をラップしようとしましたが、それをプロセスのターゲットとして使用しましたが、sys.exit()
はゾンビプロセスを正しく終了していないようです。正しい方法は何でしょうか?
私は、ブロッキングjoin()
をしたい、またdaemon=True
を設定しないでください。最終目標は、誰かがこのモジュールをインポートし、関数に@asyncを入れ、それが別のプロセスで実行され、関数の終わりに達すると自身を終了させることです。
1.遅延の事を申し訳ありません、私はそれを編集しました。なぜそれが機能していないのかをテストするために追加されました。それはまだありません。 2.プールオブジェクトを使用しようとしましたが、デコレータと組み合わせて使用しようとするとPicklingErrorsが悪化しました。 – Ben