[英]Python Flask with Telethon
我想從我的 Flask Web 應用程序中使用 Telethon Telegram API。 但是當我運行它時,我收到以下錯誤:
運行時錯誤:線程“Thread-1”中沒有當前事件循環。
我認為 asyncio 存在一些問題。 但我不確定。
這是我的代碼
#!/usr/bin/python3
from flask import Flask
from telethon import TelegramClient
from telethon import sync
app = Flask(__name__)
@app.route('/')
def index():
api_id = XXXXXX
api_hash = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
client = TelegramClient('XXXXXX', api_id, api_hash)
client.start()
return 'Index Page'
if __name__ == '__main__':
app.run()
基本上,這是由於 Python 的 GIL。 如果您不想深入了解asyncio
內部結構,只需pip3 install telethon-sync
就可以了。
這是我在嘗試后學到的東西。 首先,確保你知道 asyncio 是什么,它真的超級簡單。 然后,您可以以更高的生產力來處理它。
Telethon 使用 asyncio,這意味着當您調用阻塞方法時,您必須等到協程完成。
client.loop ###Doesn't work inside flask, it might have to do with threads.
您可以輕松導入 asyncio 並使用主循環。 像這樣。
import asyncio
loop = asyncio.get_event_loop()
現在您已准備好等待協程完成。
這是一個代碼示例。
async def getYou():
return await client.get_me()
@app.route("/getMe", methods=['GET'])
def getMe():
return {"MyTelegramAccount": loop.run_until_complete(getYou())}
還有一件事情。 不要使用telethon.sync,它沒有完全轉換為同步,它使用上述模式等待所有方法。
在你的地方,我會考慮使用Quart,它是 Telethon 自己的文檔中建議的,它更容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.