PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak otrzymywać automatyczne powiadomienia o zmianach w tabelach?

donmage ma rację - LISTEN i NOTIFY są tym, czego chcesz. Nadal będziesz potrzebować pętli odpytywania, ale jest ona bardzo lekka i nie spowoduje wykrywalnego obciążenia serwera.

Jeśli chcesz psycopg2 uruchamiać wywołania zwrotne w w dowolnym momencie w swoim programie możesz to zrobić, tworząc wątek i wykonując pętlę odpytywania przez ten wątek. Sprawdź, czy psycopg2 wymusza bezpieczny wątkowy dostęp do połączenia; jeśli nie, musisz wykonać własne blokowanie, aby pętla odpytywania działała tylko wtedy, gdy połączenie jest bezczynne, a żadne inne zapytania nie przerywają cyklu odpytywania. Możesz też użyć drugiego połączenia do odpytywania zdarzeń.

Tak czy inaczej, gdy wątek w tle, który odpytuje zdarzenia powiadamiające, otrzyma je, może wywołać funkcję zwrotną Pythona dostarczoną przez program główny, która może modyfikować struktury danych / zmienne współdzielone przez resztę programu. Uważaj, jeśli to zrobisz, ponieważ utrzymanie może szybko stać się koszmarem.

Jeśli przyjmiesz takie podejście, zdecydowanie sugeruję użycie multithreading / multiprocessing moduły. Znacznie ułatwią Ci życie, zapewniając proste sposoby wymiany danych między wątkami i ograniczając modyfikacje dokonywane przez wątek nasłuchujący do prostych i dobrze kontrolowanych lokalizacji.

Jeśli używasz wątków zamiast procesów, ważne jest, aby zrozumieć, że w cPythonie (tj. „normalnym Pythonie”) nie możesz mieć prawdziwego przerwania wywołania zwrotnego, ponieważ tylko jeden wątek może być wykonywany naraz w cPythonie. Przeczytaj o „globalnej blokadzie interpretera” (GIL), aby dowiedzieć się więcej na ten temat. Ze względu na to ograniczenie (i łatwiejszy, bezpieczniejszy charakter domyślnej współbieżności typu „nothing”) często wolę wieloprocesorowość niż wielowątkowość.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy te znaki są prawidłowe dla XML?

  2. Postgres:Nie znaleziono odpowiedniego sterownika dla jdbc

  3. Przekazać parametry WHERE do widoku PostgreSQL?

  4. Rails / Postgres:„musi pojawić się w klauzuli GROUP BY lub być użyty w funkcji agregującej”

  5. Jak usunąć wiele tabel w PostgreSQL za pomocą symbolu wieloznacznego?