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对象进行操作.这意味着在您尝试加速计算的过程中,其他线程会阻碍进程.在您的用例中,一个线程将只检查新输入,因此这不会导致任何问题.