マルチプロセスの基本的な使い方
import multiprocessing import os import time def run(): print("父进程:%s,子进程:%s" % (os.getppid(), os.getpid())) time.sleep(2) if __name__ == "__main__": p = multiprocessing.Process(target=run) p.start() p.join()
プロセス間通信
異なるプロセス間でメモリを共有しないで、2つのプロセス間でデータ交換を実現するには、次のメソッドを使用できます
Queue
import multiprocessing def f(q): q.put(11111) if __name__ == "__main__": q = multiprocessing.Queue() p = multiprocessing.Process(target=f, args=(q,)) p.start() print(q.get())
Pipe
import multiprocessing def f(conn): conn.send(1) conn.send(2) print(conn.recv()) conn.close() if __name__ == "__main__": parent_conn, child_conn = multiprocessing.Pipe() p = multiprocessing.Process(target=f, args=(child_conn,)) p.start() print(parent_conn.recv()) print(parent_conn.recv()) parent_conn.send(3) p.join()
Inter -プロセスデータ共有
マネージャー
import multiprocessing import os def func(d, l): d[os.getpid()] = os.getpid() print(d) l.append(os.getpid()) print(l) if __name__ == "__main__": manager = multiprocessing.Manager() d = manager.dict() l = manager.list() p_list = [] for i in range(5): p = multiprocessing.Process(target=func, args=(d, l)) p.start() p_list.append(p) for p in p_list: p.join()
プロセスロック
複数のプロセスが共有リソースにアクセスしたい場合、ロックはアクセスの競合を回避できます
import multiprocessing def f(l, i): l.acquire() print("hello world", i) l.release() if __name__ == "__main__": lock = multiprocessing.Lock() for num in range(10): p = multiprocessing.Process(target=f, args=(lock, num)) p.start()
プロセスプール
プロセスプールを使用すると、内部でプロセスキューが維持されます。次に、プロセス プールに移動してプロセスを取得します。プロセス プールに使用可能なプロセスがない場合、プログラムはプロセス プールにプロセスができるまで待機します
import multiprocessing import os import time def foo(i): time.sleep(2) print("in process", os.getpid()) return i + 100 def bar(arg): print("==>exec done:", arg) if __name__ == "__main__": pool = multiprocessing.Pool(5) for i in range(10): pool.apply_async(func=foo, args=(i,), callback=bar) print("end") pool.close() pool.join()
以上がマルチプロセス学習Python入門の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。