【发布时间】:2015-01-12 06:09:58
【问题描述】:
我写了一个 ESL 服务器,它控制 FreeSWITCH 服务器上的调用流程。问题是连接关闭后,内存消耗并没有减少到正常水平。在与服务器建立数百个连接后,它的内存消耗达到 GB 并且必须强制终止。我已将问题确定为 ESLconnection 对象。我曾尝试使用 del 删除对象及其实例,但无济于事。代码如下:
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()
脚本.py:
def process(con):
info = con.getInfo()
uuid = info.getHeader('unique-id')
con.execute('hangup', "NORMAL_CLEARING", uuid)
这需要为您的 linux 版本编译的 freeswitch 的 ESL 模块。让我知道是否需要解释执行此操作的程序。这里使用的是Python2.7。
【问题讨论】:
-
我不得不将 Python-ESL 替换为 mod_python,它允许您在 FreeSWITCH 中运行 python 代码而不需要套接字,因为我无法找到问题的解决方案。
标签: python freeswitch