gpt4 book ai didi

python - 在哪里为 Django 中的外部服务实例化客户端?

转载 作者:行者123 更新时间:2023-11-28 19:09:13 25 4
gpt4 key购买 nike

Django 中为外部服务(例如 Zookeeper、Cassandra、Redis 等)创建客户端实例的公认做法是什么?

我需要此客户端从 View 内部执行“设置键”操作,并且由于高开销,我不想在每个请求上都创建客户端。

目前我已经在 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))

问题是 zookeeper 客户端在 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 中寻找处理此类情况的公认做法。

最佳答案

如果您的问题可以减少到最后一点,您可以避免在迁移过程中设置全局变量:

import sys
if 'makemigrations' not in sys.argv and 'migrate' not in sys.argv:
# variable setting here

关于python - 在哪里为 Django 中的外部服务实例化客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42713460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com