我有一个简单的应用程序(Telegram bot),目前大约有2000-3000人在使用。
因此,我想每隔“ N”秒增加用户的余额。这取决于它们的当前状态。该代码可以正常工作,但是该功能可能会在一段时间后不起作用。我以30秒开始,但是在第一个问题之后,我认为30秒不足以遍历所有行并执行它。因此,现在我以1200秒的速度运行它,但是无论如何它会在一段时间后停止增长。
那是因为它还是我在代码本身中做错了什么?
P.S。我使用的是Python3和SQLite,并且该僵尸程序一直在廉价的弱VPS服务器上运行。
def balance_growth():
try:
cursor = connMembers.cursor()
sql = "SELECT * FROM members"
cursor.execute(sql)
data = cursor.fetchall()
for single_data in data:
if single_data[5] == "Basic":
sql = "UPDATE members SET balance = {B} + 1 WHERE chat_id = {I}".format(B=single_data[1], I=single_data[0])
cursor.execute(sql)
elif single_data[5] == "Bronze":
sql = "UPDATE members SET balance = {B} + 2 WHERE chat_id = {I}".format(B=single_data[1], I=single_data[0])
cursor.execute(sql)
elif single_data[5] == "Silver":
sql = "UPDATE members SET balance = {B} + 12 WHERE chat_id = {I}".format(B=single_data[1], I=single_data[0])
cursor.execute(sql)
elif single_data[5] == "Gold":
sql = "UPDATE members SET balance = {B} + 121 WHERE chat_id = {I}".format(B=single_data[1], I=single_data[0])
cursor.execute(sql)
elif single_data[5] == "Platinum":
sql = "UPDATE members SET balance = {B} + 1501 WHERE chat_id = {I}".format(B=single_data[1], I=single_data[0])
cursor.execute(sql)
cursor.execute(sql)
connMembers.commit()
cursor.close()
t = threading.Timer(120, balance_growth).start()
except Exception as err:
print(err)
答案 0 :(得分:1)
为什么不只在一个更新语句中而不是在每一行中都做呢?像
${vav}
编辑:
其他建议:
答案 1 :(得分:0)
问题在于,您在每个UPDATE语句之后都调用commit()
,这将迫使数据库从其缓存中写回所有更改。
完成所有操作后执行一次提交。