家中PC上,端口扫描的python脚本多次出现pika connection closed的错误,同一脚本在办公机和虚机上从来没问题。
比较奇怪,因为我比较谨慎,在需要延时的地方都使用了mq.conn.sleep()而非time.sleep(),也避免陷入一个长时的循环。
connection closed一般是因为heartbeat timeout引起的,server主动关闭了连接。
为了解决这个问题,在家中PC机上禁用heartbeat,参数heartbeat_interval设置为0:
params = pika.ConnectionParameters(host=MQ_HOST, port=MQ_PORT, credentials=pika.credentials.PlainCredentials(MQ_USER, MQ_PASSWD), heartbeat_interval=0) self.conn = pika.BlockingConnection(parameters=params)