我正在尝试从Last.fm获取数据,并将这些数据写入CSV文件。我有一个.csv,根据这个a.csv的每一行,我从Last.fm获取其他数据,然后将它们保存到b.csv。因此,a.csv和b.csv的大小相同。
a.csv是一个包含大约800万条数据行的大型文本文件,因此我尝试运行多个进程,每个进程处理大约250,000行。
我尝试使用python多处理模块,我也试过运行多个终端。问题是大多数时候(大约9个中的10个或更多),进程随机停止写入每个CSV文件。
例如,我开始运行4个进程,它们通常会开始写入单独的CSV文件。然后,当随机时间过去时,很少有CSV文件不再被修改。有时其中一个CSV会在(几分钟左右)后立即停止我开始运行该过程,其他csvs也会在几个小时或几个小时后停止。这些模式是完全随机的,很少,所有过程都会成功完成,这就是为什么我无法弄清楚它们一直停止的原因。我在其他计算机上试过并没有区别,所以这个问题看起来并不依赖于计算资源。
此外,即使CSV文件停止被修改,该过程仍在运行,因为我使代码每1000条数据线打印到终端的进度。
以下是我的代码的整体结构(我只是编写了我认为以抽象形式理解程序必不可少的代码):
f_reader = csv.reader(f, delimeter=',')
# (same for other csv files needed ..)
for line in a.csv:
if 1000 data lines are processed:
print('1000 tracks processed')
url = Lastfm API root url + selective data in line
req = urllib2.Request(url)
response = urllib2.urlopen(req) # fetch data from Last.fm and save result to req
info = etree.fromstring(response.read())
temp1 = info.find('data1').text.encode('utf-8')
temp2 = info.find('data2').text.encode('utf-8')
temp = [temp1, temp2]
for column in temp:
f.write('%s;' % column)
f.write('\n')
f.close()
有人可以帮忙吗?
答案 0 :(得分:0)
尝试在某处添加f.flush()
调用,例如,在1000行检查点中。也许文件只是被缓冲,而不是写入磁盘。例如,请参阅How often does python flush to a file?