全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
楼主: 深海空间

全球python开发论坛

[复制链接]
 楼主| 发表于 2022-5-7 22:09:48 | 显示全部楼层
Salta 发表于 2022-5-7 21:55
Redis,直接在内存处理了啊

虽然问题解决了,但是我还是想请教一下,怎么处理?因为我记得好像redis只能存放字符串 哈希 集合 列表呀,还能存文件的吗
发表于 2022-5-7 22:25:03 | 显示全部楼层
requests的content是二进制流,本来就是存在内存中的,可以直接使用,但是这样有很大弊端,有可能内存溢出,最优解还是将content写入文件,形成类似文件池,单独进程去处理文件池发给bot
发表于 2022-5-7 22:27:45 | 显示全部楼层
有个更通用一些的方法,把内存映射成硬盘,然后下载的文件直接写入这个内存盘
发表于 2022-5-7 22:33:41 | 显示全部楼层
好久没看到那么有技术含量的帖子了,我最近也有个类似的问题,图片要post过去才能拿到,不是地址,而是直接返回二进制文件,也是python搞定的。
 楼主| 发表于 2022-5-7 22:38:55 | 显示全部楼层
rem 发表于 2022-5-7 22:25
requests的content是二进制流,本来就是存在内存中的,可以直接使用,但是这样有很大弊端,有可能内存溢出 ...

对原理性的不是很理解,我想问下,像下面这样,第一次把文件请求下来之后的content存在变量file里,然后给第二次requests用,当第二次用完之后,那个file里存的content所占用的内存不是会被释放出来吗?还是会持续存在一段时间?如果会持续存在的话我可以手动删除吗?或者说把他存放再某个作用域里面,比如for,我记得以前学java的时候好像记得,for里定义的变量在结束循环之后会回收机制给回收?python可以这样吗?
 楼主| 发表于 2022-5-7 22:40:59 | 显示全部楼层
phpsky 发表于 2022-5-7 22:33
好久没看到那么有技术含量的帖子了,我最近也有个类似的问题,图片要post过去才能拿到,不是地址,而是直接 ...

我这个图床要post过去才可以拿到图片的url,然后想拿到文件的话,还得重新get一次那个post取回来的链接
发表于 2022-5-7 22:44:16 | 显示全部楼层
深海空间 发表于 2022-5-7 22:38
对原理性的不是很理解,我想问下,像下面这样,第一次把文件请求下来之后的content存在变量file里,然后 ...

import gc

file = ...
......
del file
gc.collect()
发表于 2022-5-7 22:57:38 | 显示全部楼层
深海空间 发表于 2022-5-7 22:38
对原理性的不是很理解,我想问下,像下面这样,第一次把文件请求下来之后的content存在变量file里,然后 ...

按你的想法是单线程运行,函数执行结束会会回收内存,这样不存在内存问题,就是效率比较低。更多的是网络波动引起的问题,比如图片get正常,post到tg出错,这个流程你怎么写是不是外面要套异常去跳过,或者图片get出错,你要重试吗,重试几次,重试过程进程是否锁死,这无疑是在浪费时间。
所以我说的最优解就是做成生产者消费者的模式,一边只管获取图片写入文件,获取不到那是网络问题或者被反爬,文件有了另一边慢慢消费给tg,成功一个删除一个或者移动到另一个文件夹再加上一定的保留期
 楼主| 发表于 2022-5-7 23:07:52 | 显示全部楼层
rem 发表于 2022-5-7 22:57
按你的想法是单线程运行,函数执行结束会会回收内存,这样不存在内存问题,就是效率比较低。更多的是网络 ...

好吧,那我再问下,每一张图片都要执行这三个步骤,get下来写入保存到本地,在读取出来发送给TG,再删除这个本地文件,这样会不会有性能问题? 到时候会加上多线程,因为get和post会需要一段时间,不能让脚本干等着。。
发表于 2022-5-7 23:20:32 | 显示全部楼层
深海空间 发表于 2022-5-7 22:09
虽然问题解决了,但是我还是想请教一下,怎么处理?因为我记得好像redis只能存放字符串 哈希 集合 列表呀 ...

二进制数据流就行... 很简单,哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-5-4 19:47 , Processed in 0.074876 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表