在开发其他类时保持PySerial端口打开

时间:2017-01-19 12:19:46

标签: python python-3.x bluetooth pyserial python-embedding

我通过蓝牙使用串行连接来读取IMU的结果。我写了一些设置基本连接的低级方法。但是在编写其他类(例如可视化或计算)时,我不断关闭并重新打开串行连接和蓝牙端口。这会给蓝牙驱动程序带来压力,并且在使用一定量后端口将无法打开。

我在带有集成蓝牙设备的Windows 7 64位笔记本电脑上使用Spyder和Python 3.4。我无法更改操作系统,但我可以安装软件。

有没有办法在编程使用serial_connection类的其他类时保持serial_connection类运行?

1 个答案:

答案 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生成客户端并完成真正的交易。

最后,如果您必须让两个代码在没有远程呼叫的情况下进行交互,则可以使用Queueasyncio轻松替换这两个进程和远程调用。