加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:34:32 所属栏目:百科 来源:网络整理
导读:我正在使用的是:PostgreSQL和Python.我正在使用Python来访问PostgreSQL 我需要的:如果有人在数据库上的特定表上记录某些内容,则在Python上接收自动通知. 我认为可以使用在某个时间间隔内转到该表的例程并检查更改.但它需要一个循环,我想要一种类似于同步方
我正在使用的是:PostgreSQL和Python.我正在使用Python来访问PostgreSQL

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

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

可能吗?

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读