我使用的是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)
函数。你知道吗
根据生成PDF所需的时间,您可能希望阻止响应,直到生成文件,然后才返回HTTP201。你知道吗
它对多线程没有影响,对客户端和服务器都没有影响:
客户机应该以任何方式执行非阻塞请求(或者至少从不同于处理UI事件的线程执行)。此外,如果客户机不关心响应(即PDF是否正确生成),则由客户机在不等待响应的情况下发送请求。
服务器。。。无论如何,服务器必须生成PDF。立即返回HTTP 201不会改变任何事情。另外,服务器当前正在响应一个请求并不意味着它不会处理另一个请求(除非您有太多请求或使用配置非常奇怪的HTTP服务器)。
如果PDF生成实际上需要很长时间(比如超过一分钟),那么返回HTTP202 Accepted(and not HTTP 201!)可以是一个解决方案,以避免超时或客户端无法理解服务器为何长时间不响应的情况。你知道吗
相关问题 更多 >
编程相关推荐