5

私はPythonを使用してプログラムを開始しようとしています。このプログラムは、主にポーリングを実行します。このプログラムは、シリアルポートから(を介してPySerial)常に読み取り、ファイル記述子から読み取ります。ファイル記述子は時々変更されます。私はモジュールを調べ始めましたが、代わりにモジュールを使用するための提案をどんどん見つけthreadingていきました。multiprocessing

私はPythonに精通しておらず、ほとんどCのバックグラウンドを持っています。Pythonのスレッドアプローチの技術的な利点は何ですか?

Cでは、スレッドはデータを共有しますが、通信するためにIPCを設定する必要があります。これは、Pythonでも同じように見えますか?

私のユースケース:

Main process (or thread?) -
   start & initialize
       |
       V
    spaw child----------------------> start & initialize
       |                                   |
       V                                   V
      while (1) <------------+          wait for data<------+
       |                     |             |                |
       V                     |             V                |
   read file descriptors     |         read from            |
       |                     |         serial port<-----+   |
       V                     |             |            |   |
   value changed?  ------No--+             V            |   |
       |                     ^        message done?--No-+   |
       V                     |             |                |
    Report change------------+             V                |
     over serial                       alert parent---------+

だから私はスレッドを考えていました。なぜなら、データの共有がシリアルを介して簡単になり、シリアルポートへの共有ハンドルを持つことができるからです。これは理にかなっていますか、それとも私はこれをPythonの観点から間違って考えていますか?

4

1 に答える 1

11

multiprocessingは主にPythonで使用され、GIL(Global Interpreter Lock)を回避します。これにより、スレッドが並列計算を試みるのに役立ちなくなります。リソースアクセスの場合、スレッドは完璧であり、実装を容易にするためのより良いオプションです。

GILは、1つのスレッドのみが同時に任意のPythonオブジェクトを操作できることを意味します。これは、計算を高速化しようとしている場合、プロセスが他のスレッドによって妨げられることを意味します。ユースケースでは、1つのスレッドが新しい入力をチェックするだけなので、これによって問題が発生することはまったくありません。

于 2012-10-22T14:52:59.743 に答える