线程与Python中的进程

Mik*_*ike 5 python multithreading serial-port multiprocessing

我即将使用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---------+
Run Code Online (Sandbox Code Playgroud)

所以我在考虑线程,因为它可以使共享数据更容易通过串口,并且它们可以拥有串行端口的共享句柄.这是否有意义,或者我从Pythonic的角度来看这是错误的吗?

Gar*_*tty 11

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

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

  • 这是CPython的一个实现细节,人们真的太挂了 - 在99%的情况下,它真的没关系. (2认同)