学习Python并尝试做一些雄心勃勃的事情(也许是太多)。
应用程序(控制台,像服务器一样静默运行),需要与2个串口通信,需要处理定时器,需要在Redis KV-store上推送信息,写日志,以及与其他类似的串口交互使用unix IPC(或socket comm。)的应用程序
考虑这样一个应用程序的更简单方法(在我看来)是使用线程和事件队列。但是由于我理解为GIL强制执行线程限制,因此它不是Python的一个选项(除非,我误解了事情)。另一种方法,我所理解的 - 是使用异步I / O框架,绿线程,协同程序等。
twisted,gevent和asyncoro是否真的可以替代我打算编写的异步事件驱动编程?
由于学习扭曲似乎是一项巨大的投资(在时间/精力方面),我想知道gevent和asyncoro是否可以更容易和更好的选择?从目前为止所做的表面文档阅读来看,asyncoro似乎是最简单的,新学习的数量非常有限,Twisted是另一种极端,而gevent在中间的某个地方 - 但后来我不确定,如果他们是真的可比。
以下是应用程序在多线程时将执行的操作的示例:
所有线程都需要进行日志记录,所有线程都使用计时器(和其他事件)来执行某些操作。定时器用于定期执行某些逻辑,并用作超时以保护某些操作(阻塞或非阻塞)。
我对Python的经验非常有限,但我有使用C / C ++和Java编写类似程序的经验。使用Python来学习。
答案 0 :(得分:1)
您可以使用此处提及的任何库来实施您所描述的应用程序。您也可以使用传统线程。 GIL阻止您在执行Python字节代码操作时实现硬件级并行(与从Python程序调用的本机代码不同)。它不会阻止您执行并行I / O操作 - 这听起来就像您的应用程序主要关注的那样。
在你的问题中没有足够的细节提供这些工具之一的推荐(如果有足够的细节,问题可能是巨大的,正确回答它的努力可能会阻止任何人在这样做的时候)。通常可以肯定的是,线程方法可能是最糟糕的(由于各种原因,我甚至试图在这里尝试消失;它们在互联网上的记录得很好)。