discord py bot中的多任务
Multitasks in discord py bot
我正在尝试使用 discord py 进行多任务处理,但我遇到了问题
代码:
@tasks.loop(seconds=10)
async def taskLoop(ctx, something):
await ctx.send(something)
@client.command()
async def startX(ctx, something):
taskLoop.start(ctx, something)
@client.command()
async def endX(ctx):
taskLoop.cancel()
taskLoop.stop()
在 discord 中,我启动如下命令:-startX zzzzzzzzzz
如此有效,机器人每 10 秒发送一次“zzzzzzzzzz”
当我尝试创建一个新任务时(而之前的任务仍然是 运行),例如:-startX yyyyyyyy
我收到错误:
Command raised an exception: RuntimeError: Task is already launched and is not completed.
显然我明白这是因为另一个任务仍在工作,但我查看了文档并找不到创建多个任务的方法。
有什么解决办法吗?也许线程?
您实际上不能多次启动同一个任务。您可以创建一个“任务生成器”,它将生成并启动任务
started_tasks = []
async def task_loop(ctx, something): # the function that will "loop"
await ctx.send(something)
def task_generator(ctx, something):
t = tasks.loop(seconds=10)(task_loop)
started_tasks.append(t)
t.start(ctx, something)
@bot.command()
async def start(ctx, something):
task_generator(ctx, something)
@bot.command()
async def stop(ctx):
for t in started_tasks:
t.cancel()
我正在尝试使用 discord py 进行多任务处理,但我遇到了问题
代码:
@tasks.loop(seconds=10)
async def taskLoop(ctx, something):
await ctx.send(something)
@client.command()
async def startX(ctx, something):
taskLoop.start(ctx, something)
@client.command()
async def endX(ctx):
taskLoop.cancel()
taskLoop.stop()
在 discord 中,我启动如下命令:-startX zzzzzzzzzz
如此有效,机器人每 10 秒发送一次“zzzzzzzzzz”
当我尝试创建一个新任务时(而之前的任务仍然是 运行),例如:-startX yyyyyyyy
我收到错误:
Command raised an exception: RuntimeError: Task is already launched and is not completed.
显然我明白这是因为另一个任务仍在工作,但我查看了文档并找不到创建多个任务的方法。
有什么解决办法吗?也许线程?
您实际上不能多次启动同一个任务。您可以创建一个“任务生成器”,它将生成并启动任务
started_tasks = []
async def task_loop(ctx, something): # the function that will "loop"
await ctx.send(something)
def task_generator(ctx, something):
t = tasks.loop(seconds=10)(task_loop)
started_tasks.append(t)
t.start(ctx, something)
@bot.command()
async def start(ctx, something):
task_generator(ctx, something)
@bot.command()
async def stop(ctx):
for t in started_tasks:
t.cancel()