2016-12-13 7 views
2

私はDjangoでZeroMQ PUSH-PULLイベント管理をしようとしています。 this linkに基づいて、私のようにPUSHクライアントを作成します:Zeromq Pussy/PULL in Django

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) 

とPULLサーバとして:別のファイルに

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を操作できます。これをどうすれば処理できますか?ありがとう。

+0

わからない何を求めている..あなたを行いますあなたのスクリプトにDjangoを含める方法を知りたいので、ORMを使用できますか? – FeedTheWeb

答えて

1

わからないあなたがここにZMQを使用しますが、スクリプトではDjangoを含める方法を求めている場合は、私はそれを行う方法である(使用virtualenvの)

#!/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") 
+0

私は同じことを望んでいましたが、実際のジャンゴビューでは、 whileループなし。 – Pant

+0

@Pant、どこかで連続して動作するプログラム(デーモン)が必要です。それ以外の場合は、ポートを開いて待機することはできません。 – FeedTheWeb