我正在尝试利用多处理库利用Python 2.7解析数据中的并行化。手头的任务是读取大量大型数据文件并将其内容作为字典或列表返回。问题是当我尝试从我的函数返回时,发送回已解析的数据,我的机器(在Ubuntu Linux中运行)挂起,内存和负载指示器处于最大值。
代码执行类似这样的操作
import multiprocessing as mp
def worker(filex):
""" reading lots of data """
raw = filter(lambda x: len(x.split())>3,
open(filex).readlines())
data = {}
... # putting all the data in the data dictionary
return data
# multiprocessing options
nproc = mp.cpu_count()
pool = mp.Pool(processes=nproc)
traj = pool.map(worker, tuple(files_to_parse))
pool.close()
大数据结构是产生问题的结构。有趣的是,如果我返回其他代码,那么即使我传递的数据结构是空的。使用数据作为列表而不是字典没有帮助。
有什么建议吗?
答案 0 :(得分:0)
您的计算机不会挂起,但可以使用其所有容量来完成您的程序,因此一切都按预期工作。最终,您的计算机应该完成它的任务。
话虽如此,你可以做一些事情:
json
模块可能不是最合适的。您真的需要将整个文档解析为 Python对象吗?imap
甚至imap_unordered
而不是map
。如果您的主进程可以比下载和解析数据结构更快地处理数据结构,那么内存压力应该保持不变。