2015-02-19 46 views
0

我在Django REST框架中使用Django Python框架。当一个模型的新实例被保存,我需要生成保存在本地服务器上的PDF。有没有办法,我可以岔开生成PDF,以便用户立即得到了回报201在服务器生成PDF的任务呢?我不知道这是否会是多线程合适的情况。如何在返回201视图后运行函数

父的保存功能开始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)功能返回的东西给客户端。

回答

1

根据多少没有考虑到生成PDF,你可能要直到生成的文件以阻止响应,然后才返回HTTP 201

它在多线程没有影响,无论是客户端,也不是为服务器:

  • 客户应该做的非阻塞请求任何方式(或至少做他们比处理UI事件的一个不同的线程)。此外,如果客户不关心响应(即PDF是否正确生成),则客户端无需等待响应即可发送请求。

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

如果PDF生成其实需要很长的时间(比如超过一分钟),然后返回HTTP 202接受and not HTTP 201!)可能是为了避免超时或客户端将无法理解的情况下的解决方案为什么服务器不响应太久。

相关问题