如何接收有关表中更改的自动通知?

前端之家收集整理的这篇文章主要介绍了如何接收有关表中更改的自动通知?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用的是:Postgresql和Python.我正在使用Python来访问Postgresql

我需要的:如果有人在数据库上的特定表上记录某些内容,则在Python上接收自动通知.

我认为可以使用在某个时间间隔内转到该表的例程并检查更改.但它需要一个循环,我想要一种类似于同步方式的东西.

可能吗?

donmage是对的 – LISTEN和NOTIFY是你想要的.您仍然需要一个轮询循环,但它非常轻量级,并且不会导致可检测的服务器负载.

如果你希望psycopg2在你的程序中随时触发回调,你可以通过生成一个线程并让该线程执行轮询循环来实现.检查psycopg2是否强制执行线程安全的连接访问;如果没有,则需要进行自己的锁定,以便轮询循环仅在连接空闲时运行,并且其他任何查询都不会中断轮询周期.或者您可以使用第二个连接进行事件轮询.

无论哪种方式,当轮询通知事件的后台线程收到一个时,它可以调用主程序提供的Python回调函数,这可能会修改程序其余部分共享的数据结构/变量.请注意,如果你这样做,它很快就会成为维持的噩梦.

如果采用这种方法,我强烈建议使用多线程/多处理模块.它们将使您的生活变得更加轻松,提供了在线程之间交换数据的简单方法,并限制了监听线程对简单且控制良好的位置所做的修改.

如果使用线程而不是进程,重要的是要理解在cPython(即“普通Python”)中你不能有一个真正的回调中断,因为一次只能在cPython中执行一个线程.阅读“全球翻译锁”(GIL)以了解更多相关信息.由于这种限制(以及默认并发时无共享的更简单,更安全的性质),我经常更喜欢多处理到多线程.

猜你在找的Postgre SQL相关文章