线程与Python中的进程

时间:2012-10-22 14:50:54

标签: python multithreading serial-port multiprocessing

我即将启动一个使用Python的程序,它主要进行轮询,它将不断从串口读取(通过PySerial)并从文件描述符中读取,该文件描述符将不时发生变化。我开始调查threading模块,但后来我一直在寻找使用multiprocessing模块的moremore建议。

我不熟悉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的角度来看这是错误的吗?

1 个答案:

答案 0 :(得分:11)

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

GIL意味着只有一个线程可以同时对任何Python对象进行操作。这意味着在您尝试加速计算的过程中,其他线程会阻碍进程。在您的用例中,一个线程将只检查新输入,因此这不会导致任何问题。