python - 如何在电报中使用 Telethon 更快地下载大文件?
问题描述
我正在尝试做一些从电报频道下载大量文件的事情,该代码运行良好,但花费的时间太长,最重要的是我的互联网连接速度很慢我有这个代码,我正在下载重达 1gb 的文件,但它一个例子需要很长时间才能使下载更快?
from telethon.sync import TelegramClient
from telethon.tl.functions.messages import GetHistoryRequest
import datetime
import os
def get_entity_data(entity_id, limit):
entity = client.get_entity(entity_id)
fecha = datetime.datetime.today()
today = fecha.day
yesterday = today - 1
posts = client(GetHistoryRequest(
peer=entity,
limit=limit,
offset_date=None,
offset_id=0,
max_id=0,
min_id=0,
add_offset=0,
hash=0))
for post in posts.messages:
post_day = post.date.day
if post_day >= yesterday:
if post.media is not None:
try:
file_name = post.media.document.attributes[0].file_name
except:
file_name = post.media.document.attributes[1].file_name
directorio = os.getcwd()+'/descargas'
if os.path.exists('descargas/'+file_name) == False:
print(file_name, 'Descargando...')
client.download_media(message=post, file=directorio)
print('Archivo descargado.')
解决方案
我认为您可以通过更少的limit
设置offset
和使用多线程请求来处理它,也许pool
包可以帮助您使用这种方法。例如,limit 参数设置为 10 并且存在您想要获取的 1000 个 id,因此偏移量应该是offset = [0, 10, 20, 30, ..., 1000]
:
from telethon.sync import TelegramClient
from telethon.tl.functions.messages import GetHistoryRequest
import datetime
import os
import pool
offsets = [0, 10, 20, 30, ..., 1000]
pool.map(get_entity_data, offsets)
def get_entity_data(entity_id={your_id}, limit=10, offset_id=0):
your function
推荐阅读
- apache-spark - 优化 Azure Databricks 中每个核心的任务数
- java - 通过对排序键执行 IN 操作 (begins_with (condition-expression )) 查询 dynamoDB
- javascript - 如何动态复制转换为 select2.js 的选择标记?
- r - 将元素大小不等的大列表的内容写入R中的数据框
- wpf - WinAppDriver - 如何获取元素上可用的属性列表
- c++ - 自动检测 shared_ptr 何时应该是 unique_ptr
- javascript - iframe 等待嵌入的 javascript 完成
- html - 当元素被过滤器或其他原因调整时如何调整元素的位置
- c# - 单元测试和封装
- git - GWT 模块的 Maven 安装将行尾从 LF 更改为 CRLF