1

我试图在特定视图完成将响应对象发送给用户后调用函数 - 因此用户不必等待函数执行。

我正在尝试使用 Django Signals Framework 的 request_finished 但我不知道如何访问 Django 信号发送给我的回调的 kwargs 中的 HttpRequest 对象。

看起来 Signal 对象不包含有关请求的任何有用信息。

另外,这是在请求-响应周期之外执行功能的最佳方式吗?我现在不想使用像 Celery 这样的高级解决方案。

4

2 回答 2

1

该信号不会像您认为的那样做。从处理程序代码中可以看出,在处理request_finished请求时发送信号,但在将响应返回给用户之前。因此,在用户看到任何响应之前,您添加到该信号的任何内容仍然会发生。

由于 Web 服务器的工作方式,在响应返回给用户后无法运行代码。真的,唯一要做的就是使用像 Celery 这样的东西——你可以敲出你自己的版本,使用 db 表模拟任务队列,然后让一个 cron 作业从表中提取项目,但这会很多更容易使用芹菜。

于 2012-12-04T09:24:23.887 回答
0

hendrix 的 crosstown_traffic API 使用 Twisted 为 Django 提供服务,专门设计用于将逻辑延迟到响应通过线路发送到客户端之后立即执行。

http://hendrix.readthedocs.org/en/latest/crosstown_traffic/

于 2015-08-23T02:15:30.510 回答