PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

अजवाइन और लेनदेन.परमाणु

के रूप में , किसी async कार्य को उत्पन्न करना और तुरंत ब्लॉक करना और उसके समाप्त होने तक प्रतीक्षा करना शायद ही उपयोगी हो।

इसके अलावा, यदि आप इसे इस तरह से संलग्न करते हैं (.get() अंत में), आप सुनिश्चित हो सकते हैं कि mymodel आपके कार्यकर्ता द्वारा अभी किए गए उदाहरण परिवर्तन नहीं देखे जाएंगे क्योंकि वे अभी तक प्रतिबद्ध नहीं होंगे - याद रखें कि आप अभी भी atomic के अंदर हैं ब्लॉक करें।

इसके बजाय आप क्या कर सकते हैं (Django 1.9 से) django.db.transaction.on_commit का उपयोग करके वर्तमान सक्रिय लेनदेन के प्रतिबद्ध होने तक कार्य में देरी हो रही है। हुक:

from django.db import transaction

with transaction.atomic():
    mymodel.save()
    transaction.on_commit(lambda:
        mytask.delay(mymodel.id))

मैं अपने post_save . में अक्सर इस पैटर्न का उपयोग करता हूं सिग्नल हैंडलर जो नए मॉडल इंस्टेंस की कुछ प्रोसेसिंग को ट्रिगर करते हैं। उदाहरण के लिए:

from django.db import transaction
from django.db.models.signals import post_save
from django.dispatch import receiver
from . import models   # Your models defining some Order model
from . import tasks   # Your tasks defining a routine to process new instances

@receiver(post_save, sender=models.Order)
def new_order_callback(sender, instance, created, **kwargs):
    """ Automatically triggers processing of a new Order. """
    if created:
        transaction.on_commit(lambda:
            tasks.process_new_order.delay(instance.pk))

इस तरह, हालांकि, आपका कार्य निष्पादित नहीं किया जाएगा यदि डेटाबेस लेनदेन विफल हो जाता है। यह आमतौर पर वांछित व्यवहार होता है, लेकिन इसे ध्यान में रखें।

संपादित करें :इस तरह से on_commit सेलेरी कार्य को पंजीकृत करना वास्तव में अच्छा है (w/o lambda):

transaction.on_commit(tasks.process_new_order.s(instance.pk).delay)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्ट्रिंग -> java.util.Date -> java.sql.Date (समय टिकट के साथ)

  2. PostgreSQL में दी गई तालिका के लिए सभी ट्रिगर सूचीबद्ध करने के 3 तरीके

  3. समूह के साथ लोअर केस कॉलम का चयन करें या रेल 4 में निचला (कॉलम) चुनें

  4. कई इंडेक्स को मिलाकर पोस्टग्रेज करता है

  5. टेक्स्ट से इंट में कैसे डालें यदि कॉलम में पोस्टग्रेएसक्यूएल में इंट और न्यूल दोनों मान हैं