具有Discord的多线程(计划作业)

问题描述 投票:0回答:1

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

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

不和谐的导入是否可能以某种方式掩盖了它?我想我可能需要看书或其他东西!

再次,谢谢。我确实尝试过搜索,但是没有任何反应!

python python-asyncio discord discord.py
1个回答
0
投票

[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.sleepnon-blocking睡眠-如果在此处使用time.sleep,则该漫游器将等待time.sleep完成,并且将不响应其他任何传入的消息。但是await asyncio.sleep的作用是将收益控制权返回到事件循环,该事件循环可以处理其他机器人功能。只有在30分钟之后,控制权才会返回on_ready

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

© www.soinside.com 2019 - 2024. All rights reserved.