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

标签 pyramid

事务管理器返回后如何运行 myscript.py。此外,我希望脚本不会阻塞。

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

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

最佳答案

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

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 。您不会将其与事务 Hook 一起使用;只需注册一个要使用 Celery 运行的任务即可。

关于pyramid - 如何在 Pyramid 的事务管理器返回后运行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15593516/

相关文章:

python - 解码 Pyramid POST 数据(MultiDict 对象)

python - 如何以优雅的方式处理复杂的 URL?

python - 对 alembic.ini 使用不同的 .ini 文件

python - 如何将 Bokeh 服务器集成到 Pyramids 应用程序中?

python - 如何摆脱 PyCharm 中的库根标记

python - 检查不存在的可选表

jquery - 使用 ajax 和 jQuery Form 进行变形

python - 访问子模板中声明的变量或 Controller 范围的变量

python - Pyramid AuthTktAuthenticationPolicy secret 参数

sqlalchemy - 防止写入特定表(只读表)