Утечка памяти Python с pyzmq и тонардо - PullRequest
1 голос
/ 08 марта 2019

мое приложение использует pyzmq, работает с торнадо, основная работа - как центр задач. Память увеличится до 6G, когда задача занята, но когда я остановлю запрос задачи и после того, как все задачи zmq завершатся, память уменьшится только до 3.9g. я использую gc.set_debug (DEBUG_LEAK), чтобы проверить мусор памяти и найти, что многие объекты не могут быть освобождены. Например,

<cell at 0x7fa3b33389f0: weakproxy object at 0x7fa3d88aafc8>,
<cell at 0x7fa3b3338ec0: function object at 0x7fa3d0ac52a8>,
<cell at 0x7fa3b33382f0: function object at 0x7fa3d0ac5aa0>

Окружающая среда: питон: 2.7.5

смерч: 4.5.2

pyzmq: 17.0.0

код как показано ниже:

loop = ZMQIOLoop()
loop.install()
context = zmq.Context()
zmq_publish = context.socket(zmq.PUB)
zmq_publish.bind("tcp://127.0.0.1:%s" % "5555")
zmq_dispatch = context.socket(zmq.REP)
zmq_dispatch.bind("tcp://127.0.0.1:%s" % "5556")
zmq_result = context.socket(zmq.PULL)
zmq_result.bind("tcp://127.0.0.1:%s" % "5557")
receiver = ZMQStream(zmq_result)
receiver.on_recv(on_worker_data_in)
dispatch_stream = ZMQStream(zmq_dispatch)
dispatch_stream.on_recv(dispatch_recv)
web.Application([(r'/api/v1/sync/(cli|snmp|all)', 
    CommandApiHandler),], autoreload=False).listen(port)
try:
    ioloop.IOLoop.instance().start()
except KeyboardInterrupt:
    pass
...