我无法弄清楚运行程序时出现的内存错误,该程序在运行Windows 7 64位的Windows计算机上运行包含990纳税申报数据的亚马逊在线托管的XML的并行读取。
我在我的机器上本地下载的CSV中迭代ID索引,以存储每个XML的链接(大约有200,000个):
URLs = 'https://s3.amazonaws.com/irs-form-990/' + df990Orgs['OBJECT_ID'].astype(str) + '_public.xml'
然后我使用并行化的for循环用我编写的XML解析器提取所有数据,并返回所有字段及其值的字典(大约200个字段,每个字段为200,000条记录):
ListRows = Parallel(n_jobs = -1)(delayed(XMLParsefromURL)(URL) for URL in URLs)
然后,我从ListRows创建一个pandas数据框并将其保存为CSV:
df = pd.DataFrame(ListRows)
df.to_csv('OrgInfo' + strname + '.csv')
如果我只为10,000个元素运行并行化循环,它运行完美,我得到一个填充的CSV。但是,如果我让它运行所有条目(~200,000),我不可避免地会在运行中遇到以下错误:
Exception in thread Thread-3:
Traceback (most recent call last):
File "C:\Users\jnimgaonkar\AppData\Local\Programs\Python\Python36-32\lib\threading.py", line 916, in _bootstrap_inner
File "C:\Users\jnimgaonkar\AppData\Local\Programs\Python\Python36-32\lib\threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\jnimgaonkar\AppData\Local\Programs\Python\Python36-32\lib\multiprocessing\pool.py", line 463, in _handle_results
task = get()
File "C:\Users\jnimgaonkar\AppData\Local\Programs\Python\Python36-32\lib\multiprocessing\connection.py", line 250, in recv
File "C:\Users\jnimgaonkar\AppData\Local\Programs\Python\Python36-32\lib\multiprocessing\connection.py", line 318, in _recv_bytes
return self._get_more_data(ov, maxsize)
File "C:\Users\jnimgaonkar\AppData\Local\Programs\Python\Python36-32\lib\multiprocessing\connection.py", line 344, in _get_more_data
f.write(ov.getbuffer())
MemoryError
奇怪的是,我在macbook air上运行它没有任何错误(它只有4 GB的内存) - 整个事情编译得很完美,我得到了一个正确的CSV我机器上的记录数量。
从我试图弄清楚这个问题的研究中,我知道它可能与Windows无法fork()(或者至少不方便)有关,但我不知道如何制作使用该信息来寻找解决方案。我很感激你能给我的任何帮助。谢谢。