使用python twisted框架连接到多个串行套接字
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用python twisted框架连接到多个串行套接字,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1861字,纯文字阅读大概需要3分钟。
内容图文
![使用python twisted框架连接到多个串行套接字](/upload/InfoBanner/zyjiaocheng/742/85ca116b359443b3929d08aee069c6bf.jpg)
我目前使用twisted来连接到我拥有的串行设备,使用如下代码.
from twisted.internet import reactor
SerialPort(Handler(), "/dev/ttyACM1", reactor, baudrate='9600')
reactor.run()
但是,我知道需要扩展应用程序以监视添加(和删除)的新串行设备.我目前使用pyinotify来寻找添加/删除的新设备,这看起来效果很好.
class EventHandler(pyinotify.ProcessEvent):
def process_IN_CREATE(self, event):
... connect to serial device
...
目前我似乎有几个问题.我认为最大的问题是我对Twisted知之甚少,不知道这样做的“正确”方法是什么.
目前正如我所知,pyinotify事件处理程序在一个单独的线程中启动,这意味着反应堆没有在主线程中运行.这是一个问题吗?
连接第一个设备后,我很难添加第二个设备 – 至少反应堆已经在第二个设备添加时运行.即使我用一个保护它
if not reactor.running:
第二个连接没有正确添加到反应器(至少connectionMade,dataReceived接收方法不会触发).
如果我首先启动反应器,然后让pyinotify事件尝试并添加到正在运行的反应器,这似乎也不起作用 – 设备连接,但dataReceived方法永远不会被调用.
基本上,我确信有一个简洁的方法让这个工作,我只是无法通过谷歌或反复试验找到它.任何人都可以向我建议我如何才能使这个工作?
提前感谢您提供的任何帮助,
西蒙
解决方法:
任何时候你想使用Twisted API但你的代码没有在与反应器相同的线程中运行,你可以使用reactor.callFromThread让反应器在你的线程中调用你的一些代码.所以,例如,你可以这样做:
def process_IN_CREATE(self, event):
reactor.callFromThread(
SerialPort, Handler(), "/dev/ttyACM1", reactor, baudrate='9600')
但是,您也不需要任何额外的线程来执行您所描述的操作.而不是使用pyinotify,使用twisted.internet.inotify:
from twisted.python.filepath import FilePath
from twisted.internet.inotify import IN_CREATE, INotify
from twisted.internet import reactor
def created(ignored, path, mask):
SerialPort(
Handler(),
"/dev/ttyACM1", # Or... use `path` here?
reactor, baudrate='9600')
notifier = INotify()
notifier.watch(FilePath("/some/directory"), IN_CREATE, callbacks=[created])
notifier.startReading()
reactor.run()
内容总结
以上是互联网集市为您收集整理的使用python twisted框架连接到多个串行套接字全部内容,希望文章能够帮你解决使用python twisted框架连接到多个串行套接字所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。