Django爲外部服務(例如Zookeeper,Cassandra,Redis等)創建客戶端實例的做法是什麼?在Django中實例化外部服務的客戶端?
我需要此客戶端從視圖內執行「設置密鑰」操作,我不想在每個請求上創建客戶端由於高開銷。
目前我已經在views.py
中聲明它爲全局變量,但那不是很好,因爲它在我做python manage.py makemigrations
時也被實例化了。
一個真正剝離下來例如問題:
urls.py
from django.conf.urls import url
from app.views import MyView
urlpatterns = [
url(r'^', MyView.as_view()),
]
views.py
from django.shortcuts import render
from django.views import View
from django.http import HttpResponse
from kazoo.client import KazooClient
import logging
logging.basicConfig(level=logging.DEBUG)
zk = KazooClient(hosts="127.0.0.1:2181")
zk.start()
# Create your views here.
class MyView(View):
def get(self, request):
value, _ = zk.get("/my_zk_key")
return HttpResponse("value: {}".format(value))
的問題是,動物園管理員客戶端被創建並在除runserver
之外的情況下連接,如下所示:
$ python manage.py makemigrations
INFO:kazoo.client:Connecting to 127.0.0.1:2181
DEBUG:kazoo.client:Sending request(xid=None): Connect(protocol_version=0, last_zxid_seen=0, time_out=10000, session_id=0, passwd=b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', read_only=None)
INFO:kazoo.client:Zookeeper connection established, state: CONNECTED
No changes detected
$
我正在尋找一種在Django中處理這種情況的公認慣例。
可以使它創建連接,單 –
類請提供多一點有關客戶當前如何以及在哪裏創建的信息(您當前的代碼)以提供最佳解決方案。不同的服務/供應商/客戶可能有不同的建議方案。 (例如,Django在啓動時創建了單個數據庫DB 「連接」,但僅在執行查詢時才連接DB本身)。 – Udi
增加了一個小例子,顯示問題 – Unknown