2015-02-19 34 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!)可能是爲了避免超時或客戶端將無法理解的情況下的解決方案爲什麼服務器不響應太久。

相關問題