sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur får man automatiska meddelanden om ändringar i tabeller?

donmage är helt rätt - LISTEN och NOTIFY är vad du vill. Du behöver fortfarande en pollingslinga, men den är väldigt lätt och orsakar inte detekterbar serverbelastning.

Om du vill ha psycopg2 för att utlösa återuppringningar när som helst i ditt program kan du göra detta genom att skapa en tråd och låta den tråden utföra polling-loopen. Kontrollera om psycopg2 upprätthåller trådsäker anslutningsåtkomst; om det inte gör det måste du göra din egen låsning så att din polling-loop bara körs när anslutningen är inaktiv och inga andra frågor avbryter en polling-cykel. Eller så kan du bara använda en andra anslutning för din händelseomröstning.

Hur som helst, när bakgrundstråden som pollar för notifieringshändelser tar emot en, kan den anropa en Python-återuppringningsfunktion som tillhandahålls av ditt huvudprogram, vilket kan ändra datastrukturer/variabler som delas av resten av programmet. Se upp, om du gör detta, att det snabbt kan bli en mardröm att underhålla.

Om du använder det tillvägagångssättet rekommenderar jag starkt att du använder multithreading / multiprocessing moduler. De kommer att göra ditt liv avsevärt enklare genom att tillhandahålla enkla sätt att utbyta data mellan trådar och begränsa ändringar som görs av lyssnartråden till enkla och välkontrollerade platser.

Om du använder trådar istället för processer är det viktigt att förstå att i cPython (dvs "normal Python") kan du inte ha ett riktigt callback-avbrott, eftersom endast en tråd kan köras i cPython på en gång. Läs om det "globala tolklåset" (GIL) för att förstå mer om detta. På grund av denna begränsning (och den enklare och säkrare karaktären av delat-ingenting som standard samtidighet) föredrar jag ofta multiprocessing framför multithreading.



  1. MySQL create-funktionen returnerar inte set

  2. viloläge inbyggt SQL-frågefel

  3. Vad är skillnaden mellan PLSQL Bind-variabler och Host-variabler

  4. Installerar WordPress 5 på ZEIT nu med MySQL Hosting