python多线程写入一个文件_Python多线程写入文件是10x s

我一直在尝试将一个包含许多行(270亿)的大文件转换为JSON。googlecompute建议我利用多线程来提高写入时间。我已经将我的代码转换为:import json

import progressbar

f = open('output.txt', 'r')

r = open('json.txt', 'w')

import math

num_permutations = (math.factorial(124)/math.factorial((124-5)))

main_bar = progressbar.ProgressBar(maxval=num_permutations, \

widgets=[progressbar.Bar('=', '[', ']'), ' ', progressbar.Percentage(), progressbar.AdaptiveETA()])

main_bar.start()

m = 0

for lines in f:

x = lines[:-1].split(' ')

x = json.dumps(x)

x += '\n'

r.write(x)

m += 1

main_bar.update(m)

为此:

^{pr2}$

我几乎直接从模块手册中复制了队列编码。在

以前,整个剧本需要两天时间。现在是说20天!我不太清楚为什么,有人能给我解释一下吗?在

编辑:这可以被认为是Python全局解释器锁(GIL)问题,但是,我不认为是这样-它不是计算密集型问题,是IO瓶颈问题,从线程文档来看:If you want your application to make better use of the computational

resources of multi-core machines, you are advised to use

multiprocessing. However, threading is still an appropriate model if

you want to run multiple I/O-bound tasks simultaneously.

我对此的理解是有限的,但我相信这是后者,即IO限制的任务。这是我最初想要多线程时的想法:IO调用阻塞了计算,IO调用可以将IO调用放在一个单独的线程中,以允许计算函数继续运行。在

进一步编辑:也许事实是我从输入中得到了一个IO块,这正是它减慢速度的原因。关于如何有效地将“for”循环发送到另一个线程有什么想法?谢谢!在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值