【发布时间】:2018-12-08 08:57:55
【问题描述】:
我目前正在运行两个单独的 python 脚本,一个用于 Flask webapp,另一个用于 discord.py 机器人。在收到烧瓶 webapp 的传入请求后,我想调用 discord.py 脚本中的一个函数并将其输出返回到视图。
目前这两个脚本都处于阻塞状态,因此我有兴趣使用 redis 消息队列在彼此之间传递请求(类似于 kombu 包)。
webapp.py:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
user = get_user(123456789) # get_user function from bot.py
return "Hello, {0}".format(user.name)
if __name__ == "__main__":
app.run()
bot.py:
import discord
client = discord.Client()
async def get_user(user_id):
user = await client.get_user_info(user_id)
return user
if __name__ == "__main__":
client.run("bot token")
我不确定如何完成这项任务,或者 Kombu 是否真的是要走的路。我将如何实现我的烧瓶 webapp,以便我可以在我的 discord.py 机器人中调用函数?
【问题讨论】:
-
看起来您根本不想使用不和谐的机器人,您只是想与 API 交互以检索信息。您可能想深入了解
get_user_info协程如何工作的内部结构,并完全避开机器人,转而向 API 发出您自己的请求。 -
我这里只是使用get_user_info函数作为一个小例子。我打算将我的 bot.py 脚本中的一些函数共享到烧瓶脚本中,这些函数涉及比获取 API 并返回结果更多的工作。 @Patrick Haugh
-
我认为将不和谐机器人与网络服务器完全分离的解决方案可能是最好的。让两者通过一些消息传递协议(Web 请求、套接字 IO、队列等)进行交互。您应该能够创建新的事件侦听器,您可以向您的
discord.py机器人注册,以获得类似于on_message之类的功能。 -
目前这两个脚本彼此独立运行。我正在研究诸如kombu和rq之类的库来实现redis队列。但我对如何实施它一无所知。是否有任何示例可以实现消息队列以调用第二个脚本中的函数,该函数会将其结果返回给第一个脚本? @PatrickHaugh
标签: python flask message-queue discord.py