2017-08-17 64 views
0

上下文:我正在編寫一個Django腳本,如下所示。據我所知,下面的循環將阻止Django應用程序並阻止其他進程運行(例如請求處理程序)。Django中的協程

問題:我應該這樣做Django運行下面的循環和產量他們被觸發時運行其他腳本。如果說劇本完成後,在相同指數循環將簡歷

# ./app.py 

while True: 
    items = queryItems() 
    for item in items: 
     process(item) 

約束:答案應該在Python 2.7工作,只使用庫支持Python 2.7

回答

2

幾件事情:

據我所知,環路下面將阻止Django應用程序,並防止其他進程運行(例如請求處理)。

這是部分正確的;循環將阻止你當前請求,直到它已經完成了,但它不會(從其他客戶)發生的同時阻止其他請求。每個進入的請求都將在一個單獨的工作進程中執行。

我該怎麼做才能讓Django運行以下循環,並在觸發時運行其他腳本。

我想你問這裏是「我怎樣才能運行process(item)異步/並行?」。 Django沒有提供任何可以像開箱即用的那樣並行運行任務的任何東西。如果您想在返回響應之前等待所有處理完成,則可以使用多線程/多進程方法。另一個選擇是使用celery這是一個異步的任務運行器,可以很好地插入到django中。 Celery允許任務執行完全獨立於請求/響應週期,並且具有許多用於檢查任務狀態的好功能等。