Python中的线程与进程

Python中的线程与进程,python,multithreading,serial-port,multiprocessing,Python,Multithreading,Serial Port,Multiprocessing,我将要启动一个使用Python的程序,该程序主要进行轮询,它将不断地从串行端口(通过PySerial)读取数据,并从一个文件描述符读取数据,该文件描述符将不时发生变化。我开始研究线程化模块,但后来我不断地寻找使用多处理模块的建议 我对Python不是很精通,主要来自C语言背景。Python中线程方法的技术优势是什么 在C语言中,线程共享数据,而不是必须设置一些IPC来通信,这对Python来说似乎是一样的 我的用例: Main process (or thread?) - start &a

我将要启动一个使用Python的程序,该程序主要进行轮询,它将不断地从串行端口(通过
PySerial
)读取数据,并从一个文件描述符读取数据,该文件描述符将不时发生变化。我开始研究
线程化
模块,但后来我不断地寻找使用
多处理
模块的建议

我对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---------+
主进程(或线程?)-
启动和初始化
|
v
spaw子级----------------->启动和初始化
|                                   |
V V

虽然(1)
多处理
主要用于Python中,以避免GIL(全局解释器锁),GIL(全局解释器锁)会阻止线程用于尝试并行计算-对于资源访问,线程是完美的,并且是易于实现的更好选项


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

多处理是一种(有点笨重的IMHO)避开GIL的方法。在这种情况下,我认为
threading
是一种方法。@Downvoter-我能告诉你为什么你会觉得这个问题:“没有显示研究成果;它不清楚或没有用处”?非常好的答案,谢谢。我想我需要再调查一下吉尔。这对我来说是一个新概念。这是CPython的一个实现细节,人们真的非常关注它——在99%的情况下,这真的不重要。