PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara menerima pemberitahuan otomatis tentang perubahan tabel?

donmage benar - LISTEN dan NOTIFY adalah apa yang Anda inginkan. Anda masih memerlukan polling loop, tetapi sangat ringan, dan tidak akan menyebabkan beban server yang terdeteksi.

Jika Anda ingin psycopg2 untuk memicu panggilan balik kapan saja di program Anda, Anda dapat melakukan ini dengan memunculkan utas dan meminta utas itu menjalankan loop polling. Periksa untuk melihat apakah psycopg2 memberlakukan akses koneksi thread-safe; jika tidak, Anda harus melakukan penguncian sendiri sehingga polling loop Anda hanya berjalan saat koneksi tidak aktif, dan tidak ada kueri lain yang mengganggu siklus polling. Atau Anda bisa menggunakan koneksi kedua untuk polling acara Anda.

Either way, ketika utas latar belakang yang polling untuk acara pemberitahuan menerimanya, itu dapat memanggil fungsi panggilan balik Python yang disediakan oleh program utama Anda, yang mungkin memodifikasi struktur data/variabel yang dibagikan oleh program lainnya. Hati-hati, jika Anda melakukan ini, itu bisa dengan cepat menjadi mimpi buruk untuk dipertahankan.

Jika Anda mengambil pendekatan itu, saya sangat menyarankan menggunakan multithreading / multiprocessing modul. Mereka akan membuat hidup Anda jauh lebih mudah, menyediakan cara sederhana untuk bertukar data antar utas, dan membatasi modifikasi yang dibuat oleh utas mendengarkan ke lokasi yang sederhana dan terkontrol dengan baik.

Jika menggunakan utas alih-alih proses, penting untuk dipahami bahwa di cPython (yaitu "Python normal") Anda tidak dapat memiliki interupsi panggilan balik yang sebenarnya, karena hanya satu utas yang dapat dieksekusi di cPython sekaligus. Baca tentang "kunci juru bahasa global" (GIL) untuk memahami lebih lanjut tentang ini. Karena keterbatasan ini (dan sifat shared-nothing yang lebih mudah dan aman secara default concurrency) saya sering lebih memilih multiprocessing daripada multithreading.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Skrip PHP\HTML untuk mengisi bidang formulir secara otomatis saat item dipilih dari daftar tarik-turun

  2. Periksa apakah ada urutan di Postgres (plpgsql)

  3. PostgreSQL, pemicu, dan konkurensi untuk menerapkan kunci temporal

  4. PostgreSQL - membuat baris pertama ditampilkan sebagai total baris lainnya

  5. OperationalError:kursor _django_curs_<id> tidak ada