Соединение Telnet с TS3 ServerQuery становится все медленнее и медленнее

Я написал бота для TeamSpeak 3, который работает через ServerQuery (интерфейс telnet). Но бот продолжает отвечать позже и позже, вначале это занимает около 0,1 секунды, примерно через 1 минуту боту требуется около 10 секунд для ответа, а использование команд делает его еще быстрее.

Есть идеи почему?

Так что в основном интерфейс telnet отправляет данные с сервера TS3 в мой скрипт на python, ts3 Модуль получает и обрабатывает данные, затем сценарий примет решение о том, каким будет действие.

В качестве модулей я использую MySQLdb а также ts3( https://github.com/benediktschmitt/py-ts3)

Мой исходный код здесь: https://pastebin.com/cJuyB9ZH

Другой скрипт, который просто берет всех клиентов и помещает их в базу данных каждые 5 минут, выполняется несколько дней без каких-либо проблем.

Я проверял код несколько раз сейчас и даже удалял переменные сразу после их использования, но он все еще имеет ту же проблему.

Я полагаю, что это своего рода ОЗУ, поэтому я просматривал код несколько раз, но не мог понять, почему и где.

Sidenote: Я знаю, что иногда я вызываю commit(), когда это совершенно не нужно, но я не знаю, может ли это вызвать проблемы, но я не понимаю, как это сделать.

Краткая (моя) версия моего кода:

import ts3
import MySQLdb
# Some other imports like time and threading and such

## Connect to TS3
tsConn = ts3.query.TS3Connection(tsAddr, tsPort)
try:
    tsConn.login(client_login_name=tsUser, client_login_password=tsPass)
    tsConn.use(sid=tsSID, virtual=True)
    print(" ==>> CONNECTED TO TS3 SERVER: " + tsAddr)
except ts3.query.TS3QueryError as e:
    print("Login to TS Server failed! Aborting...")
    exit(1)

## Connect to mySQL
try:
    qConn = MySQLdb.connect(host=qHost, user=qUser, passwd=qPass, db=qDB)
    qServer = qConn.cursor()
    print(" ==>> CONNECTED TO mySQL SERVER: " + qHost)
except OperationalError:
    print("Cannot connect to mySQL Database! Aborting...")
    exit(1)

running = True
while running:
    tsConn.send_keepalive()
    qServer.execute("SELECT 1") # keepalive

    try:
        e = tsConn.wait_for_event(timeout=1)

    except TS3TimeoutError:
        pass

    else:
        try:
            # <some command processing here>
        except KeyError:
        try:
            if event[0]["reasonid"] == "0":
                tsConn.sendtextmessage(targetmode=1, target=event[0]["clid"], msg=greetingmsg.format(event[0]["client_nickname"]))
        except:
            pass

0 ответов

Другие вопросы по тегам