私はhttp rest callから取得したデータをユーザーに更新するdiscord botを作成しようとしています。asycioバックグラウンドスレッドでaiohttpを使用する方法
discord.pyはasyncioを使用しているので、私はこのアプローチに従うことを試みると思いました。
async def my_background_task():
print("starting BG task")
await client.wait_until_ready()
while not client.is_closed:
requests.get(getMyUrl()).json()["dict_element"]
#do more stuff
client.loop.create_task(my_background_task())
client.run("api key goes here")
同期「リクエスト」ライブラリを使用すれば十分です。しかし、私はそれがクラッシュするまで、約2,3時間実行することができます。私は、「要求」が無限ループを終わらせることに失敗したためだと思います。
async def fetch(session, url):
async with session.get(url) as resp:
print(resp.status)
return await resp
async def fetch_url(loop, url):
async with aiohttp.ClientSession(loop=loop) as session:
await fetch(session, url)
async def my_method(url):
loop = asyncio.get_event_loop()
return loop.run_until_complete(fetch_url(loop,url))
async def my_background_task():
print("starting BG task")
await client.wait_until_ready()
while not client.is_closed:
await my_method.("www.theinternet.com/restcall").json()["dict_element"]
#do more stuff
このように、私は今、aiohttpを使って作業しようとしていますが、このループ内の非同期ループに関する問題にぶつかります。
私はこれにアプローチする方法について適切な説明が見つかりませんでした。私はかなりPythonと非同期関数の新機能です。