Python中的线程与进程比较

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的角度来看,我的想法是不正确的?


1
多进程是绕过GIL的一种(我认为有点笨重)方式。在这种情况下,我认为threading是更好的选择。 - mgilson
@Downvoter - 你能告诉我为什么你认为这个问题:“没有展示研究努力;不清楚或者没有用处”? - Mike
1个回答

12

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

GIL意味着同一时间只有一个线程能够操作任何Python对象。这意味着在尝试加速计算时,进程将受到其他线程的限制。在您的用例中,一个线程将仅检查新输入,因此这不会造成任何问题。


非常棒的答案,谢谢。我想我需要更深入地了解GIL。这对我来说是一个新概念。 - Mike
2
这是CPython的一个实现细节,人们过于纠结于此——在99%的情况下,它并不重要。 - Gareth Latty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接