0

ServerQuery (telnet インターフェース) 上で動作する TeamSpeak 3 用のボットを作成しました。しかし、ボットは後で応答し続け、最初は 0.1 秒ほどかかり、1 分後にはボットが応答するのに約 10 秒かかり、コマンドを使用するとさらに高速になります。

理由はありますか?

基本的に、telnet インターフェイスは TS3 サーバーから Python スクリプトにデータを送信し、ts3モジュールがデータを受信して​​処理し、スクリプトがアクションを決定します。

私が使用しているモジュールMySQLdbとしてts3( https://github.com/benediktschmitt/py-ts3 )

私のソースコードはここにあります: https://pastebin.com/cJuyB9ZH

すべてのクライアントを取得して 5 分ごとにデータベースにプッシュする別のスクリプトは、何日も問題なく実行されます。

コードを何度もチェックし、変数を使用した直後に変数を削除しましたが、それでも同じ問題があります。

私の推測では、それは一種の RAM の詰まりであると思われるため、コードを何度も調べましたが、その理由や場所がわかりませんでした。

補足: まったく必要ない場合に commit() を呼び出すことはありますが、それが問題を引き起こす可能性があるかどうかはわかりませんが、その方法はわかりません。

私のコードの短い(er)バージョン:

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
4

0 に答える 0