Я написал сервер ESL, который контролирует поток вызовов на сервере FreeSWITCH. Проблема в том, что после закрытия соединения потребление памяти не уменьшается до нормального уровня. После того, как на сервер будет сделано несколько сотен подключений, его потребление памяти идет на ГБ, и его нужно убить силой. Я указал, что проблема связана с объектом ESLconnection. Я попытался удалить объект и его экземпляры с помощью del, но безрезультатно. Код, как показано ниже:Потребление памяти python ESL
ivrServer.py
import SocketServer
from ESL import *
import importlib
import sys
import threading
import traceback
import signal
import time
class ESLRequestHandler(SocketServer.BaseRequestHandler):
#svr_ivr_log = None
def setup(self):
fd = self.request.fileno()
self.con = ESLconnection(fd)
self.svr_ivr_log.info("Client connected: %s" % str(self.client_address))
def handle(self):
ivr_script = importlib.import_module('script')
ivr_script = reload(ivr_script)
ivr_script.process(self.con)
def finish(self):
self.con.disconnect()
ESLRequestHandler.svr_ivr_log = logging('server')
SocketServer.ThreadingTCPServer.allow_reuse_address = True
server = SocketServer.ThreadingTCPServer(('', 9090), ESLRequestHandler)
server.serve_forever()
script.py:
def process(con):
info = con.getInfo()
uuid = info.getHeader('unique-id')
con.execute('hangup', "NORMAL_CLEARING", uuid)
Это потребует ESL модуль FreeSWITCH скомпилированный для Linux версии. Дайте мне знать, если мне нужно объяснить процедуру для этого. Здесь используется Python2.7.
мне пришлось заменить Python-ESL с mod_python, который позволяет запускать питона код в FreeSWITCH без розеток, поскольку я не смог найти решение проблемы. – user3295878