我即将启动一个使用Python的程序,它主要进行轮询,它将不断从串口读取(通过PySerial
)并从文件描述符中读取,该文件描述符将不时发生变化。我开始调查threading
模块,但后来我一直在寻找使用multiprocessing
模块的more和more建议。
我不熟悉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的角度来看这是错误的吗?
答案 0 :(得分:11)
multiprocessing
主要用于Python以避免GIL(全局解释器锁定),它阻止线程对于尝试并行计算有用 - 对于资源访问,线程是完美的,并且更容易选择实施
GIL意味着只有一个线程可以同时对任何Python对象进行操作。这意味着在您尝试加速计算的过程中,其他线程会阻碍进程。在您的用例中,一个线程将只检查新输入,因此这不会导致任何问题。