python – 在ZeroMQ / Tornado ioloop中使用BluetoothSocket,或者在Twisted中使用?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 在ZeroMQ / Tornado ioloop中使用BluetoothSocket,或者在Twisted中使用?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2904字,纯文字阅读大概需要5分钟。
内容图文
我正在使用PyBluez通过蓝牙连接到设备.它工作得很好.设备正在使用SPP,我使用BluetoothSocket(RFCOMM)进行连接.
基本交互是:发送init命令 – >收到确认;发送开始命令 – >接收连续数据;发送停止命令 – > …
我需要能够从另一个应用程序控制应用程序:启动,停止……我在想ZeroMQ或者可能是Tornado和HTTP / REST ifc.
我不是非常热衷于使这个多线程应用程序,因为我认为它有点过度杀死.我已经在C#/ .NET中使用了很多线程和池,但是我预感到这里并不是必需的.相反,我认为这将是非常混乱的.
但是,我需要能够通过ZeroMQ / REST / …处理命令(例如“开始”,“停止”),同时继续接收数据并发送偶尔的数据包.
由于我是Python的新手,我不知道如何实现它.我有一些想法:BluetoothSocket可以连接到ZeroMQ / Tornado IOLoop吗?
我假设我几乎可以使用Twisted完成任何事情,但我并不真正需要Twisted提供的所有功能.如果我需要拉入Twisted,我会这样做.我实际上发现了一个Twisted implementation的BluetoothSocket.但同样,我需要Twisted吗?
我尝试过使用Tornado IOLoop.没有异常被抛出,但另一方面没有收到或发送数据:
def eventhandler(s, events, error = None):
if events & ioloop.IOLoop.READ:
print 'Socket read: %r' % s.recv(1024)
elif events & ioloop.IOLoop.ERROR:
print 'Socket error!'
events = ioloop.IOLoop.READ | ioloop.IOLoop.ERROR
self._loop.add_handler(self._socket.fileno(), eventhandler, events)
我现在真的不知道自己在做什么.我最终会找到一种方法,但需要暗示要走哪条路.
广泛的Google-fu没有提供太多有用的信息,所以我现在在这里问.
编辑:我目前正在看“gevent”.似乎比扭曲更简单.
解决方法:
你应该只使用Twisted.你真正的问题似乎是关于Twisted的规模和资源利用率;无论是在API复杂性,内存,磁盘上的包大小,部署麻烦,还是与您可能想要使用的其他库冲突,您是否会在应用程序中支付不合理的成本.
你不会.
> API复杂性:Twisted的API非常简单.与某些FUD相反,您无需学习数以千计的API来有效地使用它:Twisted的核心具有非常精简的API,它具有多个离散层,并且每个层之间有许多明确记录的正式接口.如果你知道你想知道什么(看起来像你这么做),只需一点指导就可以轻松拿起它.此外,作为一个成熟的项目,社区中有很多人可以帮助您的用户加快速度.
>内存使用:Twisted一直非常小心地管理其运行时依赖项,并且只导入它需要的内容.加载反应堆将不会加载IMAP实现,因此只需导入您需要的内容,不要担心它.
>包大小:Twisted is two megabytes.此外,如果你使用任何流行的UNIX-y操作系统(Linux,OS X,FreeBSD),你可能已经有了Twisted的操作系统包.在许多发行版上,它甚至已经安装好了.
>部署麻烦:如果您要担心任何问题,可以考虑这个问题,但与部署相关的问题实际上非常小. “pip install Twisted”工作正常(现在,as long as you have a C compiler). Twisted works with py2exe,py2app和Debian包装to the extent that anything in Python does.真的,任何人都有任何问题是插件系统,对于许多应用程序,你可以忽略它.
>图书馆冲突:你会完全没事. Twisted不遗余力地兼容任何其他事件循环库所提出的每个hare-brained想法,无论是GUI还是事件循环.你想使用ZMQ吗? Go for it.龙卷风? Sure, whatever;整合是双向的.想要使用Twisted中的阻塞库,但是你在主线程上并且你不想阻止? deferToThread让你满意.想要使用阻塞库中的Twisted函数,你需要阻止吗?好的,只需制作一个blocking call from a thread.
我希望这可以解决你对Twisted“矫枉过正”的任何误解.
内容总结
以上是互联网集市为您收集整理的python – 在ZeroMQ / Tornado ioloop中使用BluetoothSocket,或者在Twisted中使用?全部内容,希望文章能够帮你解决python – 在ZeroMQ / Tornado ioloop中使用BluetoothSocket,或者在Twisted中使用?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。