0

Der Google App Engine docs Zustand:Mit deferred.defer innerhalb einer Transaktion

Sie eine Aufgabe im Rahmen einer Google Cloud Datastor Transaktion einreihen können, so dass die Aufgabe nur eine Warteschlange eingereiht-und garantiert sein In Warteschlange gestellt - wenn die Transaktion erfolgreich übergeben wurde.

und gibt folgendes Beispiel:

@ndb.transactional 
def do_something_in_transaction(): 
    taskqueue.add(url='/path/to/my/worker', transactional=True) 

Aber es ist mir nicht klar, ob das gleiche für Aufgaben erstellt mit der deferred Bibliothek gilt. Dazu:

@ndb.transactional 
def do_something_in_transaction(): 
    deferred.defer(my_function) 

ist die Aufgabe, die Warteschlange eingereiht nur dann, wenn die Transaktion erfolgreich begangen wird?

Antwort

1

Grundsätzlich ist deferred.defer nur ein Wrapper um taskqueue.add. Aus der google/appengine/ext/deferred/deferred.py Datei des SDK:

def defer(obj, *args, **kwargs): 
    ... 
    transactional = kwargs.pop("_transactional", False) 
    ... 
    try: 
    task = taskqueue.Task(payload=pickled, **taskargs) 
    return task.add(queue, transactional=transactional) 

Sie müssen also nur das Äquivalent tun, wenn Sie die verschobene Aufgabe wollen die Warteschlange gestellt transaktions:

@ndb.transactional 
def do_something_in_transaction(): 
    deferred.defer(my_function, _transactional=True) 
Verwandte Themen