我想退出其中一个def的并行进程(使用return?),以便程序在这段代码的最后一行之后继续:
from threading import Thread
def measureBT():
try:
...
return True
except TimeoutException:
...
return False
def measureWiFi():
...
thread_MeasureBT = Thread(target=measureBT)
thread_MeasureWiFi = Thread(target=measureWiFi)
thread_MeasureBT.start()
thread_MeasureWiFi.start()
thread_MeasureWiFi.join()
thread_MeasureBT.join()
想法很清楚,方法是非常错误的
如果美国宇航局阿波罗登月计划中使用了这一技术,那么在“宁静之母”号上就会有第一座非陆地坟墓
决不要像上面假设的那样依赖进程/线程终止/完成
更好地创建协作代理的结构,一个(或多个,用于更容错的系统)负责任何和所有独立的BT测量,另一个(同样独立于任何其他代理、资源或处理)负责所有WiFi测量
这样,如果出了问题(最糟糕的时刻,比如登月期间,雷达开始向中央AGC计算机发送错误信号,如果不是玛格丽特·汉密尔顿(Margaret Hamilton)女士的聪明和勇敢的工作的话,通常是这样的,她将如何控制复杂系统的原理重新设计为一套独立的控制器不受阻碍、相互之间较少的{死亡-|活着-|恐慌攻击-}锁定实体,任务将变成一个全世界观看的月球葬礼)
因此,最好将关注点分开,一个用于BR,另一个用于WiFi,并保持主进程与它们通信,无论是使用基于O/S的或
nanomsg/pynng
或ZeroMQ/pyzmq
通信框架,这些框架都可以帮助您使用TransportClass或所有TransportClass为这样的distributed-computing系统创建健壮、无阻塞的元平面可用于本地ipc://
或甚至非本地tcp://
代理间通信在那里,您将在适当的时间和方式获得所有最近的读数(独立于远程代理如何获得它们)如果你的设计更接近玛格丽特·汉密尔顿女士在半个世纪前为美国宇航局演示的原理,你甚至有机会解决任何诸如错误读数或数据丢失之类的问题
对所有麻省理工学院团队的人类英雄和关于代码设计艺术的讲座表示终极敬意
相关问题 更多 >
编程相关推荐