我为 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 分钟获取所有客户端并将它们推送到数据库中,运行数天没有任何问题。
我现在多次检查代码,甚至在使用后立即删除了变量,但它仍然存在同样的问题。
我的猜测是这有点阻塞 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