2

事务管理器返回后如何运行 myscript.py。此外,如果脚本没有阻塞,我会更喜欢。

在我看来,我正在从 POST 接收文件。由于我使用repoze.filesafe's创建文件create_file(),因此它将文件保存在临时位置,直到事务管理器返回。该文件仅在事务管理器无错误返回后以正确路径存在于硬盘上。

因此,我需要在事务管理器返回后运行我的脚本。

4

1 回答 1

2

transaction您可以通过package注册一个要在提交后运行的钩子。在您的视图中注册一个:

import transaction


def your_after_commit(success, arg1, arg2, kwarg1=None, kwarg2=None):
    if success:
        print "Transaction commit succeeded"
    else:
        print "Transaction commit failed"


def someview(request):
    current_transaction = transaction.get()
    current_transaction.addAfterCommitHook(your_after_commit, args=(1, 2), kws={kwarg1='foo', kwargs2='bar'})

这仍然会在当前请求的上下文中运行您的脚本(例如,在您的脚本返回之前,请求不会完成)。如果您需要完整的异步设置,则需要使用适当的异步解决方案,例如Celery。您不会将其与事务挂钩一起使用;只需注册一个要使用 Celery 运行的任务即可。

于 2013-03-24T11:22:22.537 回答