在我将 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 与我的相同

在 discord.py 中获取成员的角色

Discord.py — 尝试禁止用户后出现 UserNotFound 错误

Discord.py 重新上传图片

Discord.py 将角色添加到成员