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---------+

所以我在考虑线程,因为它会使共享数据更容易通过串行传输,并且它们可以共享串行端口的句柄。这是有道理的,还是我从 Pythonic 的角度考虑不正确?

4

1 回答 1

11

multiprocessing在 Python 中主要用于避免 GIL(全局解释器锁),它会阻止线程对尝试并行计算有用 - 对于资源访问,线程是完美的,并且是易于实现的更好选择。

GIL 意味着只有一个线程可以同时对任何 Python 对象进行操作。这意味着在您试图加快计算速度的地方,进程将受到其他线程的阻碍。在您的用例中,一个线程只会检查新输入,因此这根本不会引起任何问题。

于 2012-10-22T14:52:59.743 回答