PyZMQ 和 Django:不同视角的连接

PyZMQ and Django: connection from different view

我正在编写一个 Django Web 应用程序,用户可以在其中从每个视图执行不同的操作,当用户提交表单时,JSON 被推送到 ZeroMQ 并等待响应 (REQ-REP)。

我的问题是操作太慢了。我不知道问题是否发生,因为我使用的是在 VirtualBox 中虚拟化的低性能 Debian,但我认为问题是当我调用该函数时(见下文),我每次都建立一个新连接并且连接需要 5秒。

def push(obj):
    try:
        context = zmq.Context()
        socket = context.socket(zmq.REQ)
        socket.setsockopt(zmq.LINGER, 0)
        socket.connect('tcp://127.0.0.1:8888')
        socket.send_json(obj)
        poller = zmq.Poller()
        poller.register(socket, zmq.POLLIN)
        if poller.poll(3*1000):
            socket.recv()
            return True
        else:
            return False
    except:
        return False
    finally:
        socket.close()
        context.term()

这是对方代码:

context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind('tcp://127.0.0.1:8888')

while True:
    obj = str(socket.recv_json())
    print obj
    socket.send('ACK')

我做错了什么?也许我应该认为我需要为所有用户会话保持打开的连接,但是如何呢?如有任何提示,我们将不胜感激。

谢谢!

我已经很好地解决了卸载从 debian 存储库安装的 libzmq-dev 的问题(我想我使用的是 2.2,但我不确定)并通过以下命令使用 pip 安装 PyZMQ 和 ZMQ:

pip install --no-use-wheel pyzmq

我不确定现在安装的是哪个版本,或者哪个版本最适合 python 2.7 的稳定生产环境,但它现在运行速度很快!

感谢您的帮助。