我想執行一些一次性操作,例如啓動一個後臺線程,並在Django服務器啓動時每隔30分鐘填充一次緩存作爲初始化操作,所以它不會阻止用戶訪問網站。我應該在Django中放置所有這些代碼?我應該在Django框架中放置一次性操作操作?
- 將它們放入setting.py文件不起作用。看起來它會導致循環依賴。
- 將它們放入
__init__.py
文件不起作用。 Django的服務器調用了很多次,(這是什麼原因?)
我想執行一些一次性操作,例如啓動一個後臺線程,並在Django服務器啓動時每隔30分鐘填充一次緩存作爲初始化操作,所以它不會阻止用戶訪問網站。我應該在Django中放置所有這些代碼?我應該在Django框架中放置一次性操作操作?
__init__.py
文件不起作用。 Django的服務器調用了很多次,(這是什麼原因?)對於startserver的一個操作,您可以使用customs commands,或者如果你想有一個週期性的任務或taske的隊列,你可以使用celery
__init__ .py會在每次導入應用程序時調用。因此,如果您將Apache的mod_wsgi與prefork方法一起使用,那麼所創建的每個新進程都會有效地「啓動」該項目,從而導入__init__.py。這聽起來像是你最好的方法是創建一個新的管理命令,然後如果這是一個選項,那麼cron可以經常運行。或者,或者在啓動服務器之前運行該管理命令。您可以編寫一個運行該管理命令的快速腳本,然後啓動服務器。
我只是創建獨立的腳本並使用cron安排它們。無可否認,這有點低科技,但它工作正常。只需將它放置在項目頂層目錄中的腳本頂部並根據需要進行調用即可。
#!/usr/bin/env python
from django.core.management import setup_environ
import settings
setup_environ(settings)
from django.db import transaction
# random interesting things
# If you change the database, make sure you use this next line
transaction.commit_unless_managed()
我想如果你使用cron作業就更好用芹菜。 – diegueus9 2010-01-02 00:31:09
@ diegueus9:好的,*爲什麼芹菜更好?特別?我一直在Google上搜索,似乎...還沒有準備好黃金時段。當我爲生產做東西時,我得到*非常保守*。我見過太多精彩的下一個偉大的事物,但總是無法實現我的期望。 Cron對於新用戶來說可能是粗俗/神祕的,但我已經使用了它20年了,而且它堅如磐石。這就是我想要的產品。 – 2010-01-02 02:16:18
@peter恕我直言,我認爲,因爲: 1)django的應用 2)芹菜有一個任務隊列,但不是。 3)也許是因爲在所有操作系統中都沒有cron。 4)有很多功能,我認爲會很難與cron http://celeryproject.org/introduction.html#features 5)我認爲芹菜和工人的架構客戶端/服務器比cron作業更強大。順便說一聲,對不起我的英語不好。 – diegueus9 2010-01-02 03:16:55
我們把一次性啓動腳本放在頂層urls.py
。這通常是管理員綁定的地方 - 他們也是一次性啓動。
有些人喜歡把這些東西放在settings.py
,但似乎混合設置(這並沒有太多)與該網站的其他代碼(這是什麼東西)。
我嘗試將init方法放入urls.py中,但似乎在任何訪問之前都不會調用它 – user192048 2010-01-01 01:56:55
引用'__init __。py',每次導入該模塊時都會調用它,或者服務器重新加載它。 – Geo 2009-12-31 16:42:38