如何在Pyramid的事务管理器返回后运行脚本

时间:2013-03-24 00:01:30

标签: pyramid

如何在事务管理器返回后运行myscript.py。另外,我更喜欢脚本没有阻止。

在我看来,我正在接收来自POST的文件。由于我使用repoze.filesafe的{​​{1}}创建文件,因此它会将文件保留在临时位置,直到事务管理器返回。在事务管理器返回没有错误之后,该文件仅存在于硬盘上的正确路径中。

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

1 个答案:

答案 0 :(得分:1)

您可以通过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一起运行的任务。