我通过蓝牙使用串行连接来读取IMU的结果。我写了一些设置基本连接的低级方法。但是在编写其他类(例如可视化或计算)时,我不断关闭并重新打开串行连接和蓝牙端口。这会给蓝牙驱动程序带来压力,并且在使用一定量后端口将无法打开。
我在带有集成蓝牙设备的Windows 7 64位笔记本电脑上使用Spyder和Python 3.4。我无法更改操作系统,但我可以安装软件。
有没有办法在编程使用serial_connection类的其他类时保持serial_connection类运行?
答案 0 :(得分:1)
好吧,您可以使用importlib
module来使用某些触发器来热重新加载组件的策略:
from importlib import reload
import module_with_your_code
def refresh(self):
# make your context in a clean slate before reloading
reload(module_with_your_code)
# init your context
你可以用各种事件触发(像USR1这样的信号:
import signal, os
def on_sigusr1(a,b):
refresh()
signal.signal(signal.SIGUSR1, on_sigusr1)
print("> reload me by doing: kill -USR1 {}".format(os.getpid())
或使用sys.stdin
事件......这完全取决于您。)
但是我没有弄乱你的python解释器,而是给你最好的建议就是在不同的进程中分割你的代码。有一个进程与蓝牙的东西交谈,并通过一些RPC接受数据(无论是原始TCP套接字,文件管道,HTTP REST API,还是pubsub消息代理,它都取决于你!)。
然后,您实现了第二个模块,该客户端向该RPC生成客户端并完成真正的交易。
最后,如果您必须让两个代码在没有远程呼叫的情况下进行交互,则可以使用Queue
和asyncio
轻松替换这两个进程和远程调用。