Google应用引擎docs声明:
您可以将任务排入队列,作为Google Cloud Datastore的一部分 事务,这样任务只能入队 - 并保证是 入队 - 如果事务成功提交。
并给出了这个例子:
@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)
如果事务成功提交,是否只排队?
答案 0 :(得分: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)