返回201 vi后如何运行函数

2024-03-29 12:42:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Django-Python框架和Django-REST框架。当模型的一个新实例被保存时,我需要生成一个保存在服务器本地的PDF。有没有一种方法可以让我把生成PDF的任务分开,这样当服务器生成PDF时,用户就可以立即得到201返回?我不知道这是否适合多线程处理。你知道吗

父级的save函数在开始生成PDF之前被调用,因此在这两者之间可以安全地返回201。你知道吗

def save(self, *args, **kwargs):
        set_pdf = False
        if self.id is None and self.nda_pdf is not None and len(self.nda_pdf) > 0:
            set_pdf = True
        super(Visitor, self).save(*args, **kwargs)
        if set_pdf: generate_pdf(self)

我想在向客户机返回内容之后调用generate_pdf(self)函数。你知道吗


Tags: anddjango函数self服务器框架noneif
1条回答
网友
1楼 · 发布于 2024-03-29 12:42:31

根据生成PDF所需的时间,您可能希望阻止响应,直到生成文件,然后才返回HTTP201。你知道吗

它对多线程没有影响,对客户端和服务器都没有影响:

  • 客户机应该以任何方式执行非阻塞请求(或者至少从不同于处理UI事件的线程执行)。此外,如果客户机不关心响应(即PDF是否正确生成),则由客户机在不等待响应的情况下发送请求。

  • 服务器。。。无论如何,服务器必须生成PDF。立即返回HTTP 201不会改变任何事情。另外,服务器当前正在响应一个请求并不意味着它不会处理另一个请求(除非您有太多请求或使用配置非常奇怪的HTTP服务器)。

如果PDF生成实际上需要很长时间(比如超过一分钟),那么返回HTTP202 Acceptedand not HTTP 201!)可以是一个解决方案,以避免超时或客户端无法理解服务器为何长时间不响应的情况。你知道吗

相关问题 更多 >