在我将 discord.py 与我的主脚本结合后,任何其他代码都不会运行
Posted
技术标签:
【中文标题】在我将 discord.py 与我的主脚本结合后,任何其他代码都不会运行【英文标题】:Any other code doesn't run after I combined discord.py with my main script 【发布时间】:2021-06-16 20:25:01 【问题描述】:我制作了一个包含网络抓取和 api 请求的脚本,但我想添加 discord.py 以将结果发送到我的不和谐服务器,但在此之后它停止了:
client.run('token')
有没有办法解决这个问题?
【问题讨论】:
【参考方案1】:您需要使用线程。
Python 线程允许您同时运行程序的不同部分,并可以简化您的设计。
什么是线程?
线程是一个独立的执行流程。这意味着您的程序将同时发生两件事。
同时运行多个任务需要非标准的 Python 实现,用不同的语言编写一些代码,或者使用 multiprocessing
,这会带来一些额外的开销。
启动线程
Python标准库提供threading
import threading
x = threading.Thread(target=thread_function, args=(1,))
x.start()
结束
您需要为每个循环创建两个线程。在一个线程中创建和运行 discord 客户端,使用另一个线程进行网页抓取和 API 请求。
【讨论】:
【参考方案2】:client.run
似乎是一个阻塞操作。
例如。你的代码不应该在client.run
之后执行
您可以尝试使用loop.create_task()
(如here 所述)来创建另一个将在后台运行并将一些消息提供给您的客户端的协程。
【讨论】:
【参考方案3】:run
方法是完全阻塞的,所以我可以看到有两种方法可以解决这个问题:
-
在单独的线程中创建和运行客户端,并使用某种队列在客户端和其余部分之间进行通信
使用
start
方法,该方法返回一个异步协程,您可以将其包装到一个任务中,并与您的抓取和 API 请求进行多路复用,假设它也使用异步协程
【讨论】:
以上是关于在我将 discord.py 与我的主脚本结合后,任何其他代码都不会运行的主要内容,如果未能解决你的问题,请参考以下文章
我的 cogs 文件没有加载到我的主文件中 (discord.py)
discord.py bot 找到要删除的频道消息,但显示其客户端 ID 与我的相同