简介
最近在工作中使用 Django
和 django-rest-framework
来实现 API 开发功能,其中使用到 kafka
作为broker。
实现功能如下:
POST
方法将数据发送到服务器,通过kafka
写入指定的topic
;后台单独启动进程产生
消费者
将broker
的数据写入到MySQL
此处的进程使用一个单独的 python
文件实现,此时需要配置中使用 django orm
的配置信息,包括一些其他的配置信息。
方法一
其实这些信息也可以使用包含上下文信息的工具:
python manage.py shell
此处特别推荐神器 ipython 安装如下:
pip install ipython
如果在这个交互环境中,可以享用一切 django
的配置,我一般常用于测试 django
的 model
。
凡是都有个但是,但是我们还有 方法二
。(都看到这里了,就忍忍看完)
方法二
方法一
中很方便,但是使用起来只能在指定的交互环境中使用,不够灵活。
【我想要实现的是】:我在任意位置的代码、脚本中都可以很爽的使用 django
的配置
代码如下:
import os,threading
import sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.extend([BASE_DIR,])
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "jrjidfa.settings")
import django
django.setup()
from idfacollect.kafka_utils import Utils as kfk
from idfacollect.kafka_utils import Config as cfg
class Consumer(threading.Thread):
def run(self):
kfk.consume_to_mysql(host=cfg.KFK_HOST,
port=cfg.KFK_PORT,
topic=cfg.KFK_TOPIC_IDFA_DEVICE_STARTUP,
group_id=cfg.KFK_GP_TO_MYSQL)
kfk.consume_to_mysql(host=cfg.KFK_HOST,
port=cfg.KFK_PORT,
topic=cfg.KFK_TOPIC_IDFA_APP_CLICK,
group_id=cfg.KFK_GP_TO_MYSQL)
if __name__ == '__main__':
try:
for i in range(5): # create 5 thread exectue Consumer
t = Consumer()
t.start()
except Exception as e:
print e
说明一下:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 这个是想要使用的 `django` 工程的根目录;
sys.path.extend([BASE_DIR,])
# 将项目根目录加入到 python 搜索的 path 中
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "jrjidfa.settings")
# 设置环境变量中的 DJANGO_SETTINGS_MODULE 设置为 django 配置
import django
django.setup()
# 启动 django 配置、注册 app 等等初始化操作
总结:接下来就可以愉快的使用了,看上面代码就知道真的很愉快。
以上です!ありがとうございました