gpt4 book ai didi

python - 使用 Discord 的多线程(预定作业)

转载 作者:行者123 更新时间:2023-12-04 01:51:41 29 4
gpt4 key购买 nike

首先,道歉。我对 Python 很陌生。我来自 Java/C# 编码背景。我在很多方面都喜欢 Python 的简单性,但也发现一些标准很难确定。

例如,我已经成功地让 Discord Bot 运行起来。异步方法运行良好。但我想安排一个工作每(比如)30 分钟运行一次。但是,当我键入 asyncio.run(job()) 时,Python 告诉我“run”不是 asyncio 的属性。我真的不确定为什么会这样说。哎呀,asyncio 甚至是执行此操作的“正确”方法吗?

是否有可能 discord 导入以某种方式掩盖了它?我想我可能需要买本书或其他东西!

再次感谢。我确实尝试过对此进行搜索,但没有找到任何结果!

最佳答案

on_ready 在 discord 机器人启动时调用,所以一种方法是将您的工作附加到它:

import discord
import asyncio

client = discord.Client()

@client.event
async def on_ready():
while True:
await asyncio.sleep(30*60) # every 30 minutes
job()

client.run(os.environ.get('DISCORD_BOT_SECRET')) # provide your API token here!!

asyncio.sleep 是一种非阻塞 sleep ——如果在这里使用time.sleep,那么机器人会等待time.sleep 完成并且不会响应任何其他传入的消息。但是 await asyncio.sleep 所做的是将控制权交还给事件循环,这可以照顾其他机器人功能。只有在 30 分钟后控制才会返回到 on_ready

请注意,当您的作业运行时,它会阻止您的机器人,这对于任务处理时间超过几秒的作业来说是个问题。如果您的工作是基于 I/O 的(例如获取网站),您可以使用异步 I/O 操作(例如 aiohttp)来保持响应。如果您的作业是基于 CPU 的,您可能必须使用多个进程,例如 subprocess.Popen 如果您的作业可以通过终端命令调用。

关于python - 使用 Discord 的多线程(预定作业),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52699523/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com