2012-04-20 42 views
2

我有一个pyzmq连接器使用zeromq的python脚本。脚本实际上是一个基本的脚本,它使用ZMQ_REP套接字来接收消息,对它做一些小的事情并将其发送回去,所有这些都在无限循环中进行。没有多线程或其他任何东西。使用Zeromq的Python脚本停止接收消息

问题是当我在我的服务器上运行该服务时,约15小时后停止响应,并且它仍在运行并且端口仍然绑定。所以当我用ZMQ_REQ套接字向该脚本发送消息时,我没有得到答案。当我重新启动脚本时,它会从zmq队列中获取所有未使用的消息,因此我怀疑问题出在pyzmq连接器或一些python或zmq套接字配置中。

我在2个不同的国家的2台不同的服务器上运行脚本,1个运行ArchLinux,第二个CentOS,并在我的本地机器上运行,行为相同。此外,我试图运行python脚本,它使用基本的python套接字,只接收字符串消息并将其发回,并且现在正在工作并在没有重新启动它的情况下将消息无问题地发回10天。所以问题肯定在zmq/pyzmq的某个地方。

+0

ZMQ_REQ和ZMQ_REP脚本都在同一台机器上,还是分布在网络上?你是否使用基本的'socket.send()'和'socket.recv()'函数进行通信,或者你使用的是轮询?您是否尝试过记录ZMQ_REP脚本以准确查看其卡住的位置? – 2012-04-20 16:01:07

+1

你能发表一些代码吗?在进程被终止之前内存使用量是否增加?你使用的是什么版本的zmq和python?我之前遇到过使用python长时间运行的脚本的问题,并且一个简单的解决方案可能是在处理N个请求(即gunicorn处理其工作人员内存泄漏的方式)之后重新启动该进程。 – tapan 2012-05-02 15:12:44

回答

1

消息的发送频率是多少?您可能需要实施检测信号才能保持可靠的连接。指南中列出的“Paranoid Pirate”模式工作得很好。

相关问题