python 数据缓存后统一取出_使用python,我应该在数组中缓存大数据并一次性写入文件吗?...

我有一个gevent驱动的爬虫下载页面。爬虫程序采用producer-consumer模式,我向队列提供如下数据{方法:获取, 网址:xxxx,其他_信息:yyyy}. 在

现在我想把一些响应汇编成文件。问题是,我不能只在每次请求结束时打开和写入,io代价高昂,数据顺序不正确。在

我假设我应该对所有请求进行编号,按顺序缓存响应,打开一个greenlet循环并汇编文件,伪代码可能是这样的:max_chunk=1000

data=[]

def wait_and_assemble_file(): # a loop

while True:

if len(data)==28:

f= open('test.txt','a')

for d in data:

f.write(d)

f.close()

gevent.sleep(0)

def after_request(response, index): # Execute after every request ends

data[index]=response # every response is about 5-25k

有更好的解决办法吗?有数千个并发请求,我怀疑内存使用可能增长太快,或者一次循环太多,或者意外的事情。在

更新:

上面的代码只是演示了数据缓存和文件写入的原理。在实际情况下,可能需要运行100次循环来等待缓存完成并写入不同的文件。在

更新2

@IT Ninja建议使用队列系统,所以我用Redis写了一个替代方案:

^{pr2}$

看起来好一点,但我怀疑在Redis中保存大量数据是不是一个好主意,希望有更多的建议!在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值