2

マルチプロセッシングについて少し混乱しています。私は 3 年間の Python プログラマーですが、(非同期だけでなく) タスクを並行して実行する必要はまったくありませんでした。しかし、私が知っている、または知っていると思っていることはmultiprocessing、Python でモジュールを使用して「真の並列処理」を実現すると、新しいpython.exeプロセスが生成されるということです!

たとえば、Cinema 4Dのような 3D ソフトウェアは、利用可能なすべての CPU のパワーを使用して 3D シーンをレンダリングします。Cinema 4D.exeしかし、タスク マネージャーに複数のプロセスが表示されません。

  1. multiprocessingモジュールを使用すると複数の Python プロセスが生成されるという上記の説明は正しいですか?
  2. もしそうなら、それはなぜですか? また、C++ アプリケーションが複数のプロセスなしですべての CPU を使用するにはどうすればよいでしょうか?
4

3 に答える 3

6

It's also possible to use multiple CPUs by running multiple threads in the same process. That's just not what the Python multiprocessing module does.

There is a threading module in Python. Unfortunately in CPython, threads aren't as useful as you might think because they all contend on the so-called "Global Interpreter Lock". So they're a lot less parallel in Python than they are in many other languages. If you use threads, you need to worry about what operations in your code will really be parallel. If you use processes you don't (although you might worry about other things, like sharing data).

I don't know whether not or alternative implementations of Python have the same issue with the GIL. But unless you're writing code specifically for Jython/IronPython/whatever, the limitations of CPython apply to your program...

于 2013-02-08T17:02:00.517 に答える
1

multiprocessing モジュールを使用すると複数の Python プロセスが生成されるという上記の説明は正しいですか?

はい、そうです。Python は、並行して動作するために (追加のインタープリターを実行する) 新しいプロセスを生成する必要があります。これは、GIL( GlobalInterpreterLock ) がインタープリターごとに 1 つの実行スレッドしか許可しないためです。

もしそうなら、それはなぜですか? また、C++ アプリケーションが複数のプロセスなしですべての CPU を使用するにはどうすればよいでしょうか?

おそらく、Cinema4D には GIL のようなものはありません。したがって、複数のスレッドを並行して実行できます。

于 2013-02-08T17:00:37.650 に答える
1

Typically, you'd run multiple THREADS, not multiple PROCESSES. There are many advantages to running threads rather than processes. The main advantage is that all the memory belonging to the process is shared between threads, where you'd have to set up some sort memory sharing protocol to share (some part of) the data between different processes.

Both Python and C++ support mulithreading, but as mentioned elsewhere, the python code can't run on multiple processors. It is however useful for doing things in "semi-parallel" (I used python threads to read a file and play it on the soundcard, and at the same time record and save another file, whilst at the same time issuing other commands on the serial port to control the equipment "under test").

The Python module multiprocessing is indeed for using multiple separate processes, which helps "break the python interpreter lock".

In general, running in separate processes is more useful if you want the code to be completely independent from the other tasks running in the system, and doesn't have to share [much] data between the processes - for example calculating very large prime numbers would be a good thing to do in an independent process [I mean the ones with a few hundred thousand or more digits] - the process runs on its own with no other input for hours and hours on end, and it only needs a small amount of input that doesn't change - the "prime number candidate".

于 2013-02-08T17:02:11.800 に答える