首页 > 解决方案 > Discord.py 任务循环运行过于频繁且未完成

问题描述

我目前遇到了 Discord.py 的问题,我有一个任务循环,它会立即重复但实际上没有完成。您可以在下面找到我的代码片段。

import discord
from discord.ext import commands, tasks
import insider

@client.event
async def on_ready():
    print("Bot is Ready.")
    check_insider_activity.start()

@tasks.loop(minutes=5)
async def check_insider_activity():
    print("Checking Insider Buys")
    newBuys = insider.get_new_insider_buys()
    print(newBuys)

每当我运行我的代码时,输​​出如下:

Bot is ready.
Checking Insider Buys
Checking Insider Buys
Checking Insider Buys
Checking Insider Buys
Checking Insider Buys
Checking Insider Buys

它大约每隔一两秒发送一次“检查内幕购买”,并一直这样做,直到我退出程序。函数 get_new_insider_buys() 似乎永远不会完成,而且在任务似乎刚刚重新启动之前,我从未进入 print 语句。

在某些情况下,get_new_insider_buys() 是一个返回新内幕购买列表的函数。该函数使用 BeautifulSoup 抓取网页并使用 Pandas Dataframe 操作一些数据,然后在返回列表之前将其写入本地文件。

get_new_insider_buys() 可以完美地自行运行,但是一旦我想将它放入 Discord.py 任务循环中,它似乎永远不会执行。

我觉得好像我在函数中发生了某种形式的并发或任务错误,尽管我不知道如何或为什么,而且我束手无策。我可以让其他任务正常工作,但是一旦我将这个添加到混合中,它就会中断,我的所有任务都开始像这个一样。

标签: pythonconcurrencydiscord.pytaskpython-asyncio

解决方案


我设法解决了我的问题。

f = open("filepath", "w")它是作为我insider.get_new_insider_buys()职能范围内的副产品发生的。我的文件路径有一个相对路径,而不是直接路径。我猜 open() 处理这些的方式不同,结果我的程序出错了。

我希望那些偶然发现这一点的人可以避免头痛。


推荐阅读