0

的谷歌應用程序引擎docs狀態:使用deferred.defer的一個事務中

你可以排隊一個任務作爲谷歌雲存儲 交易的一部分,使得任務只排隊,並保證是 已排隊 - 如果事務成功提交。

,並給出了這樣的例子:

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

但它不是我清楚,如果同樣適用於與deferred庫創建的任務如此。爲此:

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

是否只有在事務成功提交時才排隊?

回答

1

基本上deferred.defer只是一個圍繞taskqueue.add的包裝。從SDK的 google/appengine/ext/deferred/deferred.py文件:

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

所以,你只需要做等值,如果你想遞延任務事務排隊:

@ndb.transactional 
def do_something_in_transaction(): 
    deferred.defer(my_function, _transactional=True) 
相關問題