"Python ESL的内存消耗"

2024-05-13 08:56:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个ESL服务器,它控制FreeSWITCH服务器上的调用流。问题是连接关闭后,内存消耗不会降低到正常水平。在与服务器建立了大约100个连接之后,它的内存消耗将消耗到GBs,并且必须强制终止它。我已经指出了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公司名称:

^{pr2}$

这需要为您的linux版本编译freeswitch的ESL模块。如果我需要解释操作步骤,请告诉我。这里正在使用Python2.7。在


Tags: 内存importself服务器logserverdefscript
1条回答
网友
1楼 · 发布于 2024-05-13 08:56:01

来自SocketServer doc

...A new instance is created for each request.

每个请求创建一个新的ESLRequestHandler实例。在

在您的setup()中,您与FreeSWITCH服务器建立了一个连接,但是在处理完请求之后再也不会关闭它。我怀疑这就是内存泄漏的原因。在

要关闭与FreeSWITCH服务器的连接,请按照以下步骤操作:

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):
        pass  # your code for interacting with the FreeSWITCH server here

    def finish(self):
        self.con.disconnect()  # close the connection

相关问题 更多 >