Python Zeromq推/拉入Django
我试图在Django中实现ZeroMQ推拉事件管理。基于,我将创建一个推送客户端,如下所示:Python Zeromq推/拉入Django,python,django,django-views,zeromq,pyzmq,Python,Django,Django Views,Zeromq,Pyzmq,我试图在Django中实现ZeroMQ推拉事件管理。基于,我将创建一个推送客户端,如下所示: context = zmq.Context() zmq_socket = context.socket(zmq.PUSH) zmq_socket.connect("tcp://127.0.0.1:5557") for num in xrange(20000): work_message = { 'num' : num } zmq_socket.send_json(work_message
context = zmq.Context()
zmq_socket = context.socket(zmq.PUSH)
zmq_socket.connect("tcp://127.0.0.1:5557")
for num in xrange(20000):
work_message = { 'num' : num }
zmq_socket.send_json(work_message)
和拉式服务器,如:
context = zmq.Context()
consumer_receiver = context.socket(zmq.PULL)
consumer_receiver.bind("tcp://127.0.0.1:5557")
work = consumer_receiver.recv_json()
data = work['num']
print data
在单独的文件中实现PUSH/PULL很好。但是我想要Django视图中的PULL服务器功能。也就是说,每当接收到消息时,我希望它在Django上被接收,并且我可以操作Django ORM。我该怎么处理?谢谢 不确定您是否在询问如何在使用ZMQ的脚本中包含Django,但下面是我如何做到的(使用virtualenv)
不知道你在问什么。。你想知道如何在你的脚本中包含Django,这样你就可以使用ORM了吗;没有
而循环。@Pant,它需要一个持续运行的程序(守护进程)。否则它无法打开端口并侦听。
#!/usr/bin/python2.7
import sys
import os
PATH=os.path.abspath(os.path.dirname(__file__))
# Relative path to the virtual environment
# (relative to the stand-alone script)
rel_path = '../../bin/activate_this.py'
activate_this = os.path.join(PATH, rel_path)
# this is needed to read the settings:
sys.path.append("../")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mainapp.settings")
execfile(activate_this, dict(__file__=activate_this))
import zmq
import json
from django.conf import settings
import django
django.setup()
from .models import Mymodel
port = "5556"
context = zmq.Context()
print "Connecting to server..."
socket = context.socket(zmq.REQ)
socket.connect ("tcp://localhost:%s" % port)
while True:
#this will listen and wait for a message
mymessage = json.loads(socket.recv())
try:
#do stuff
my = Mymodel.objects.get(id=mymessage['id'])
#send something back
socket.send("1")
except:
#on error
socket.send("0")