[英]Memory consumption of python ESL
我寫了一個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()
script.py:
def process(con):
info = con.getInfo()
uuid = info.getHeader('unique-id')
con.execute('hangup', "NORMAL_CLEARING", uuid)
這將需要為您的Linux版本編譯的freeswitch的ESL模塊。 讓我知道是否需要解釋執行此操作的過程。 這里使用了Python2.7。
...為每個請求創建一個新實例。
每個請求都會創建一個新的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.