簡體   English   中英

在Django視圖中異步調用函數的最佳方法是什么?

[英]What is the best way to call a function asynchronously in a Django view?

我想從Django視圖中調用一個函數,這可能需要2-5分鍾才能完成。 我計划異步調用它,在作業開始后返回,並使用AJAX輪詢以等待FINISHED標志。

我不想使用像Celery + RabbitMQ這樣的重量級解決方案,只需一個簡單的異步調用就可以了。

我該怎么辦? 我已經閱讀了有關子流程,線程和扭曲的信息。 在Django視圖中使用哪種最好(最安全)?

到目前為止,最好的解決方案是使用單獨的作業排隊系統,例如Celery。 沒有特別好的選擇。 這就是工作排隊系統的用途。 Celery有一些輕量級的替代方案,例如RQ(Redis Queue),它使用Redis實例作為后端,並具有方便的Django接口django-rq

我強烈建議您使用解決該問題的專用工具,因為臨時解決方案往往會導致復雜且難以調試的問題。

如果不想使用Celery + Redis或RabbitMQ,則可以使用處理代碼編寫管理命令。 從您的角度來看,您可以使用類似以下方式異步調用管理命令

from subprocess import Popen
p = Popen(['manage.py', 'my_command'])

正如有人在另一個問題上說的那樣:Popen實例可以做其他各種事情,例如可以對它進行poll()來查看它是否仍在運行。 我希望您獲得的popen實例是線程安全的或可序列化的,以便您可以重用它來了解進程是否已完成運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM