gpt4 book ai didi

python - Twisted、genvent、asyncoro——它们是我可能需要的吗?

转载 作者:太空宇宙 更新时间:2023-11-04 05:52:15 24 4
gpt4 key购买 nike

学习 Python 并尝试做一些雄心勃勃的事情(也许太多了)。

应用程序(控制台,像服务器一样静默运行),需要与 2 个串行端口通信,需要处理计时器,需要在 Redis KV 存储上推送信息,写入日志,并与其他一堆类似的交互使用 unix IPC(或套接字通信)的应用程序

(在我看来)考虑此类应用程序的更简单方法是使用线程和事件队列。然而,由于我理解为 GIL 对线程的强制限制,它不是 Python 的一个选项(除非,我误解了事情)。据我了解,另一种方法是使用异步 I/O 框架、绿色线程、协程等。

twisted , geventasyncoro我打算编写的用于异步事件驱动编程的 Python 中的真正替代品?

由于学习 twisted 似乎是一项巨大的投资(就时间/精力而言),我想知道 gevent 和 asyncoro 是否可以成为更容易和更好的选择?从到目前为止所做的一些肤浅的文档阅读来看,asyncoro 似乎是最简单的,新学习的数量非常有限,而 Twisted 是另一个极端,gevent 处于中间位置——但我不确定,如果他们是确实具有可比性。

这是一个应用程序在多线程时会执行的操作的示例:

  • Thread:1 - 定期监控串行端口的健康状况,即使用计时器。如果最后一个状态是健康的,请说每 2 分钟检查一次。如果最后一个状态不健康,那么在前 5 分钟内每 30 秒检查一次,然后在接下来的 10 分钟内每分钟检查一次……就像在指数退避中一样。请注意,有多个这样的串口。
  • 线程 2 - 监控不时通过串行端口来来去去的应用程序级 session 的状态,以及通过它发生的通信。 Redis(计划)用于写入分布式 KV-store s.t.应用程序的其他实例(在相同或其他服务器上运行)可以协调某些其他操作。
  • Thread:3 - 执行一些其他内务处理任务。

所有线程都需要记录日志,所有线程都使用计时器(和其他事件)来做某些事情。定时器用于定期执行某些逻辑并作为超时来保护某些操作(阻塞或非阻塞)。

我使用 Python 的经验非常有限,但我有使用 C/C++ 和 Java 编写类似程序的经验。为此,使用 Python 进行学习。

最佳答案

您可以使用此处提到的任何库来实现您描述的应用程序。您也可以使用传统线程。 GIL 阻止您在执行 Python 字节代码操作时实现硬件级并行性(这与从 Python 程序调用的 native 代码不同)。它不会阻止您执行并行 I/O 操作 - 这听起来像是您的应用程序主要关心的。

您的问题中没有足够的细节来提供这些工具中的一个相对于另一个工具的推荐(如果有足够的细节,问题可能会很大并且正确回答它的努力可能会阻止 SO 上的任何人从这样做)。通常可以肯定地说,线程方法可能是最糟糕的(出于各种原因,我什至不会在这里尝试解释;它们在 Internet 上有足够的记录)。

关于python - Twisted、genvent、asyncoro——它们是我可能需要的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29649489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com