Pythonマルチプロセスとデータ伝達の理解

1356 ワード

Pythonマルチプロセスとデータ伝達の理解
pythonはスレッドがシステムの原生スレッドを用いるだけでなく,プロセスも原生プロセスを用いる.
プロセスの使い方とスレッドは大きく異なります

import multiprocessing 
 
p = multiprocessing.Process(target=fun,args=()) 

スレッドの基本メソッドはプロセスで使用できます
しかし、プロセスとスレッドには明らかな違いがあります.マルチコアの運用を実現することができます.
python自体は1つのメインプロセスを起動することができて、しかも1つのメインスレッドを持ってメインプロセスを1家の主と見なして、そのメインスレッドも彼自身で、他のスレッドは妻たちに相当してプロセスして、大きくなった息子たち、スレッドは分割することができなくて、家族はやはり団結しなければなりませんが、息子の自分の事務、老子も手を出すことができなくて、だから、一家にCPUを1つしか使わずにシングルコア運用を実現すれば、複数の息子を産むことで必ずマルチコア運用を実現できる
GILがロックされているのは、ただのプロセスで、家族を団結させることです.
しかし、1つのプロセスにはこのようなフルロックしかありません.スレッドは単独で走ることはできません.では、パッケージして一緒に走ります.
マルチプロセスはこのように一般言語におけるマルチスレッドの最適化を完了した.
データ転送
マルチスレッド、マルチプロセスでは常に協同しなければならない作業があり、データのインタラクションに関連していますが、インタラクションの仕方は少し違います.
情報が伝達されると,実行をブロックしないように直接返すのではなく,対列にデータが格納されるのが一般的である.
スレッドでは、同じプロセスに属するため、グローバルなキューを定義して各スレッドにデータを圧入できます.
プロセスは異なるCPU上で実行される可能性があるため、相互間の転送はグローバルに定義できず、作成時にのみ転送できます.
内部操作:転送されたキューは実際には参照を転送するのではなく、キューを直接操作します.これは結局、異なるCPUでの作業です.
キューの転送は実際にはキューコピーの転送であり、pickleコピーを介して転送され、その後pickleがデータを転送します.

import multiprocessing 
 
multiprocessing.Queue() 

スレッドとプロセスには異なるキューオブジェクトがあり、異なるデータインタラクションを実現し、転位して使用することはできません.
もし疑問があれば伝言を残してあるいは当駅のコミュニティに行って討論を交流して、読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!