0

をdeferred.defer使用して:あなたはタスクのみエンキュー-となることが保証されるように、Googleクラウドデータストア トランザクションの一部としてタスクをキューに入れることができます<a href="https://cloud.google.com/appengine/docs/standard/python/taskqueue/push/creating-tasks#enqueuing_tasks_in_cloud_datastore_transactions" rel="nofollow noreferrer">docs</a>のGoogle App Engineのトランザクション内の状態

を エンキュー - トランザクションが正常にコミットされた場合。

と、この例を示します:

@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のラッパーです。

@ndb.transactional 
def do_something_in_transaction(): 
    deferred.defer(my_function, _transactional=True) 
を: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) 

だから、あなただけの、同等の操作を行う必要があります

関連する問題

 関連する問題