【发布时间】:2021-10-16 05:57:02
【问题描述】:
目标:
我正在开发一个不和谐机器人,它每 5 秒左右扫描一个网址,检查该网页上的指定更改,如果发生更改,将在不和谐频道中发送消息。我通过使用on_message 中的 if 语句将 url 发送到机器人来完成此操作。然后将该 url 传递给 tasks.loop() 函数,在另一个函数中对其进行扫描和处理以进行更改。
问题:
我希望能够在 discord 频道中发送一条消息,该消息可以快速结束在 tasks.loop() 中发生的过程,这样我就可以使用 on_message 函数将其传递给不同的 url 以进行扫描。在目前的形式下,它可以工作——只是非常很慢。从发送取消触发器到发送进程已取消的验证消息大约需要 3 分钟。我需要做这个 5 秒或更短。值得一提的是,该机器人使用replit 和uptime robot 继续运行,但我确信较长的响应时间与正常运行时间机器人唤醒repl 的频率无关。
代码:
我的代码要复杂得多,并且充斥着名称不明的变量,所以这里有一个更简单的 sn-p 代码,具有相同的一般结构。
client = discord.Client()
channel = client.get_channel(CHANNEL_ID)
@tasks.loop()
async def myloop(website, dataframe):
channel = client.get_channel(CHANNEL_ID)
try:
# iteratively scrape data from a website for
# a predefined change in the dataframe
if change = True:
await channel.send(notification)
except:
pass
@client.event
async def on_message(message):
channel = client.get_channel(CHANNEL_ID)
msg = message.content
if msg.startswith('track'):
website = msg[6:]
await channel.send('Now tracking '+str(website))
myloop(website,df)
if msg.starswith('stop'):
myloop.cancel()
await channel.send('Done tracking, awaiting orders.')
尝试的解决方案:
我尝试过使用某些形式的线程,但我还很陌生,但我还没有找到让它工作得更快的方法。任何建议或解决方案将不胜感激!一段时间以来,我一直在网上寻找帮助。
【问题讨论】:
标签: python asynchronous discord.py client repl.it