- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
因此,我似乎没有找到任何关于在 python 中使用新的 asyncio 模块(async、await 等)的好教程。此外,从我看过的所有教程来看,这个概念描述得很差,我似乎无法理解协程的概念。我的意思是,这个概念背后的想法并不难,但没有一个地方可以让我准确了解协程可以做什么和不能做什么,以及如何使用它们。
例如,我为目前正在构建的 Discord BOT 编写了一个名为 YouTubeAPI 的小类。 Discord.py 库的所有功能都使用 asyncio,但我的类(class)没有。我的类(class) (YouTubeAPI) 的唯一目的是从 YouTube 数据 API V3 中检索有关用户发布的最新视频的数据。实际上,我正在尝试构建一个 BOT,让我了解某人发布的所有视频的最新信息。
但为了让 BOT 正常工作,我需要制作一个 update()
函数来定期获取所有视频,以便我可以获得最新的视频。问题是更新函数需要包含在 while True
循环(或类似的东西)中,这样我才能使列表保持最新。如果我构建一个无限循环,那么我将遇到 BOT 问题(导致 BOT 崩溃和无法使用)。
所以,我想也许我可以学习新的 asyncio 模块并以这种方式解决问题。遗憾的是我什么也没找到。
下面是一些删除了所有 API key 的代码,这样您就可以更容易地看到我的问题:
from Api_Test import YoutubeAPI
import discord
import asyncio
YoutubeName = 'Vsauce'
GOOGLE_API = 'API KEY'
print('Collecting YouTube Data.')
api = YoutubeAPI(GOOGLE_API, YoutubeName) # create object that will get all info for the name 'Vsauce'
print('YouTube Data collected succesfully.')
print('Starting bot.')
def getLastVideo():
return api.videosData[0] # api.videosData looks like: [[title, link],[title, link],[title, link],]
client = discord.Client()
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
await client.send_message('Now testing: Last {} videos!'.format(YoutubeName))
#While Loop that keeps the api.videosData up-to-date and runs "await client.send_message('new video: title + ink')" if new video found in the list
client.run('Discord BOT token')
如果这篇文章的解释听起来含糊不清,我感到非常抱歉,但我完全不知道如何使用 asyncio 或类似的东西,而且我发现自己处在一个几乎找不到关于这个新概念的文档的地方。
最佳答案
您可以使用 ensure_future()
来运行您的 while
循环。这里的循环在 on_ready
被调用时开始并运行直到 bot 关闭
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
await client.send_message('Now testing: Last {} videos!'.format(YoutubeName))
asyncio.ensure_future(update_data(), client.loop) # Starts the infinite loop when the bot starts
async def update_data():
while True:
# Do the things you need to do in this loop
await asyncio.sleep(1) # sleep for 1 second
client.run('Discord BOT token')
关于python - 开始学习新的 Python 3.5 Asyncio(协程)的好地方 | Discord.py BOT 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42147092/
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
操作无法完成。 Places API 库中发生内部错误。如果您认为此错误代表错误,请使用我们社区和支持页面 (https://developers.google.com/places/support)
我正在尝试在我的项目中使用 google places,我将其设置在 fragment 中而不是 Activity 中,我的自动完成 fragment 在 fragment 中。但是,当我尝试搜索它时
我的目的是使用R来查询google api。 我有一个地址和名称列表(属于商店、餐馆等),我需要为每个地址和名称存储: “纬度”、“经度”、“业务类型” 我的想法是使用 google place ap
我正在寻找设置一个自动完成的谷歌地方小部件。 我有一个带有“searchFieldText”id 的输入类型文本。 这是我的 JS 代码: var inputsec = document.getEle
是否可以使用图形 API(或地址/ zip )按纬度/经度和半径获取地点?我在文档中的任何地方都看不到它 最佳答案 搜索 URL 的以下格式将返回某个位置附近的地点列表: https://graph.
我正在探索 Google API,主要是 Places API。由于对 Google Places API 的请求数限制为 100,000,因此我正在寻找方法来最大限度地减少发送到 API 的请求数。
伙计们,我在我的应用程序中有一个功能,可以使用 GetFiles 在特定目录中搜索特定文件。方法 System.IO.Directory.GetFiles(string path, string
我已经在 Laravel 5.3 上使用 where 查询成功创建了许多函数,但是这次发生了一些奇怪的事情。 public function show($id){ $artikel = Art
我正在为我的 iPhone 应用程序使用 Facebook 图形 API 来获取附近地点的列表,我使用带有一些参数的“搜索”请求。我得到的响应是一个包含以下信息的地点列表:“纬度”、“经度”、“名称”
我有一个 Android 应用程序,我在其中使用 Google map 显示附近的地方,如加油站、药店等。我正在使用 map 和地点 API。 https://maps.googleapis.com/
我是一名优秀的程序员,十分优秀!