这是在Python2.7.12中完成的
serialHelper是python serial周围的一个类模块,该代码运行良好
#!/usr/bin/env python
import threading
from time import sleep
import serialHelper
sh = serialHelper.SerialHelper()
def serialGetter():
h = 0
while True:
h = h + 1
s_resp = sh.getResponse()
print ('response ' + s_resp)
sleep(3)
if __name__ == '__main__':
try:
t = threading.Thread(target=sh.serialReader)
t.setDaemon(True)
t.start()
serialGetter()
#tSR = threading.Thread(target=serialGetter)
#tSR.setDaemon(True)
#tSR.start()
except Exception as e:
print (e)
然而,尝试以线程的形式运行serialGetter,正如所说的那样,它只是死了。 为什么那个函数不能作为线程运行?你知道吗
引用the Python documentation:
因此,如果您} 之前不要退出主线程。你知道吗
setDaemon(True)
创建每个新线程,然后退出主线程(通过从脚本末尾掉下来),整个程序将立即退出。这会杀死所有线程。或者不要使用setDaemon(True)
,或者在没有首先对所有要等待的线程调用^{退一步,考虑守护进程线程的预期用例可能会有所帮助。在Unix中,守护进程是在后台运行的进程,通常代表网络上的远程客户机或本地进程为请求提供服务或执行操作。同样的基本思想也适用于守护进程线程:
问题是步骤(4)。如果您忘记了某个工作对象,并在不等待其完成的情况下退出应用程序,则工作可能会中断。守护进程线程don't gracefully shut down,因此您可以让外部世界处于不一致的状态(例如,不完整的数据库事务、从未关闭的文件等)。通常最好使用常规线程,并将步骤(5)替换为显式的“完成您的工作并关闭”工作对象,主线程在退出之前将其交给工作线程。然后工作线程识别这个对象,停止等待工作队列,并在不再执行任何其他操作时终止自身。这是一个稍微提前的工作,但是在工作对象被无意中放弃的情况下会更加安全。你知道吗
由于以上所有原因,我建议不要使用守护进程线程,除非您有充分的理由使用它们。你知道吗
相关问题 更多 >
编程相关推荐