我有一个很大的json行文件(每行都是一个json对象)。我想阅读每一行并并行处理每一行。 这是我得到的:
import gzip
import multiprocessing as mp
import pandas as pd
from json import loads
def process_file(file_line):
json_line = loads(file_line)
data = json_line.get('data', None)
if data:
df = pd.DataFrame(data)
return df.groupby(['style']).score.describe()
return pd.DataFrame()
pool = mp.Pool(8)
jobs = []
with gzip.open('2018.jl.gz') as f:
for line in f:
jobs.append(pool.apply_async(process_file,(f)))
for job in jobs:
job.get()
pool.close()
但是,处理所花的时间比读取文件要长,并且最终会添加过多的作业并导致内存问题。
有什么办法可以做到这一点吗?我该如何编码,以使每个线程都抓住一行并处理该行,并在完成时又捕获一个新行,并且如果所有线程都在忙,循环将暂停?