我有一个csv文件,在那里我逐行读取url,为每个enpoint发出请求。对每个请求进行解析,并将数据写入输出.csv. 这个过程是并行的。在
这个问题与书面数据有关。部分数据部分丢失,或完全丢失(空行)。我认为这是因为异步进程之间的冲突或冲突。你能告诉我怎么解决这个问题吗。在
def parse_data(url, line_num):
print line_num, url
r = requests.get(url)
htmltext = r.text.encode("utf-8")
pois = re.findall(re.compile('<pois>(.+?)</pois>'), htmltext)
for poi in pois:
write_data(poi)
def write_data(poi):
with open('output.csv', 'ab') as resfile:
writer = csv.writer(resfile)
writer.writerow([poi])
resfile.close()
def main():
pool = Pool(processes=4)
with open("input.csv", "rb") as f:
reader = csv.reader(f)
for line_num, line in enumerate(reader):
url = line[0]
pool.apply_async(parse_data, args=(url, line_num))
pool.close()
pool.join()
尝试添加文件锁定:
对同一个文件的并发写入确实是导致数据丢失/文件损坏的已知原因。然后在“reduce/result”模式中(将每个文件串联在一起)将其写入“result”。在
相关问题 更多 >
编程相关推荐