0
私はPythonマルチプロセッシングパイプを研究しています。私の目標は2つのプロセスが2つの独立したプロセスを作り、そのうちの1つが5つのメッセージを別のプロセスに送信することです。私はそれを実行しても問題はありませんが、PIDだけを表示するだけです。このコードをどうしたのですか?私の環境はWindows 10(64ビット)とPython 3.6.1(32ビット)です。私はこのコードがなぜ機能しないのかわかりません(マルチプロセッシング。パイプ)
import os
import multiprocessing as mp
import time
global sending_end, receiving_end
sending_end, receiving_end = mp.Pipe()
def sender(sending_end=sending_end):
print('SND PID: ', os.getpid())
for _ in range(5):
sending_end.send('test')
time.sleep(1)
class receiver(mp.Process):
def __init__(self):
mp.Process.__init__(self)
def run(self, receiving_end=receiving_end):
print('REC PID: ', os.getpid())
print(receiving_end.recv())
time.sleep(1)
if __name__ == '__main__':
print('MAIN PID: ', os.getpid())
s = mp.Process(target = sender, args=(sending_end,))
s.start()
r = receiver()
r.start()
mp.freeze_support()
なぜパイプを使うのか? [Queue](https://docs.python.org/3.3/library/multiprocessing.html?highlight=multiprocessing#exchanging-objects-between-processes)が用意されています。これはすべての処理を行います。 – uphill
@uphill私は、プロセス間で双方向にメッセージを交換する可能性がある場合に備えて、パイプの使用がより互換性があると思います。 – maynull
他のプロセスとしてPythonを使用していない場合は、[サブプロセス](https://docs.python.org/3/library/subprocess.html?highlight=subprocess#module-subprocess)を検討してください。これは、mutliprocessingがドロップであるためです複数のcpuを使用してGILを回避する代わりに、より多くのpythonプロセスを生成することによって置き換えられます。 – uphill