Python:在未使用X分钟后,如何删除变量?

2024-05-18 07:53:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

from discord.ext import commands

bot = commands.Bot(command_prefix= prefix)
big_var = {}

@bot.command(name='func1')
@commands.max_concurrency(1, wait = True)
async def func1(ctx):
    func1code(big_var)

bot.run(TOKEN)

如果上次使用big_var是在X分钟前,我想运行一个函数clear_data(big_var),以节省内存

我试过:

from discord.ext import commands

bot = commands.Bot(command_prefix= prefix)
big_var = {}

@bot.command(name='func1')
@commands.max_concurrency(1, wait = True)
async def func1(ctx):
    func1code(big_var)
    await asyncio.sleep(600)
    clear_data(big_var)

bot.run(TOKEN)

但是这会阻止函数func1()完成,max_concurrency装饰器一次只允许运行一个func1()实例

我如何解决这个问题

编辑:重写问题使其更清楚


Tags: namefromimportprefixvarbotextmax
1条回答
网友
1楼 · 发布于 2024-05-18 07:53:53

threading.Timer是一个调用第一个参数秒数后的第二个参数的函数。您可能会这样做:

def del_big_var():
    global big_var
    del big_var

t = threading.Timer(X * 60, del_big_var)

def command_that_need_big_var():
    global t
    t.cancel()
    t = threading.Timer(X * 60, del_big_var)

它也不会阻止

import threading
import time

def foo(*args, **kwargs):
    print("TIME!")

def main():
    t = threading.Timer(3, foo)
    t.start()
    while True:
        print("going")
        time.sleep(1)

main()

以上将产生

going
going
going
TIME!
going
going
going
Traceback (most recent call last):
  File "thread_timer.py", line 15, in <module>
    main()
  File "thread_timer.py", line 13, in main
    time.sleep(1)
KeyboardInterrupt

相关问题 更多 >