在Python中延迟处理

0 投票
2 回答
562 浏览
提问于 2025-04-16 23:49

我正在尝试以非阻塞的方式写入事件,这样就不会拖慢我们现有的任何流程。看起来有两个可选的办法:

  • 使用Twisted的defer对象
  • 创建一个Python的日志处理器

还有其他选择吗?有没有人有这方面的经验?

背景:我们计划将事件写入亚马逊的CloudWatch服务,我担心进行PUT请求时会有延迟。其实我并不太担心丢失几个PUT请求,如果这会影响结果的话(我们写这些事件是为了报警,反正一周后都会被清除掉)。

2 个回答

1

用gevent来做这个事情其实很简单。你只需要把PUT操作放在一个单独的绿色线程(greenlet)里,然后把socket进行一些修改就可以了。

1

如果记录日志对你的应用程序有帮助,而且听起来确实有用,那就应该比使用twisted简单。你可以把日志记录到一个线程安全的内存队列里,然后用一个单独的线程(或者多个线程)从这个队列中取数据,再把它推送到云端。

当然,twisted可能会更快,或者至少更能扩展,但如果你对它不熟悉,学习起来会比较困难。

如果使用线程的方法遇到瓶颈,你随时可以把日志处理方式换成twisted,而不需要改变你应用程序的接口。所以我建议你先从简单的方法开始,确保基础都做好。

撰写回答