[英]How to use same telethon client with same session many times
我有這個 Telethon 代碼:
from telethon import TelegramClient
import asyncio
api_id = ""
api_hash = ""
session = "john"
username = 'Hello_World' # For Example
async def main():
client = TelegramClient(session, api_id, api_hash)
await client.start()
entity = await client.get_entity("https://t.me/ahsan_alhadeeth")
search_user = await client.get_participants(entity, search=username)
print(search_user)
def in_channel():
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(main())
in_channel()
in_channel()
當我對in_channel()
進行一次調用時,它會正常運行直到完成。
但是當使用兩個調用時它返回一個錯誤: sqlite3.OperationalError: database is locked
。
我想知道如何在不進行多次會話的情況下多次使用同一個客戶端。
請任何幫助。
我認為不可能在同一時間多次執行相同的任務。 由於這是 asyncio 函數,您可能希望等待第一個 in_channel() 完成,然后再執行下一個 in_channel。 database() 可能已被鎖定,因為客戶端已在使用中。
當您說多次使用同一個客戶端時,您的意思是多次運行 in_channel() 直到它完成,還是您的目標是同時運行多次 in_channel()?
我可能會幫助你,但我需要更多答案:-)
(對不起,這是一個“答案”。在我得到 50 分之前,我不允許發表評論。)
更好的是,您可以循環同一會話,但在 main 函數的末尾添加一個client.disconnect()
。
client = TelegramClient(session, api_id, api_hash)
TelegramClient 使用 Telegram 創建一個 session 並代表您的機器人或客戶端與 Telegram 的通信。 只是為了確保,這不是您與任何特定用戶(例如:約翰)的 session。 您可以根據需要與任何用戶進行交互,前提是有人發起了與您的對話或您的與憑據(api_id、api_hash)關聯的用戶/機器人被添加到相應的頻道/組。 您應該將此客戶端視為一個連接,可以在其中創建多個實例來負載平衡多個調用。
您的代碼可以修復如下:
from telethon import TelegramClient
import asyncio
class TClient:
def __init__(self, session):
api_id = ""
api_hash = ""
self.session = session
async def init(self, username = 'Hello_World'):
self.client = TelegramClient(session, api_id, api_hash)
await self.client.start()
async def main(self):
entity = await client.get_entity("https://t.me/ahsan_alhadeeth")
search_user = await client.get_participants(entity, search=username)
print(search_user)
def in_channel(self, callFn, args):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(callFn(args))
in_channel()
if __name__ == '__main__':
tc1 = TClient(session = "john1")
tc1.in_channel(tc.init())
tc1.in_channel(tc.main(username = 'Hello_World'))
tc1.in_channel(tc.main(username = 'Hello_World2'))
tc2 = TClient(session = "bot2")
tc2.in_channel(tc.init(username = 'Hello_World'))))
tc2.in_channel(tc.main(username = 'Hello_World2'))
以上內容使您能夠為多個用戶重復使用 session。 我對上面的內容做了 2 處修改。
PS - 我還沒有測試過上面的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.