Python - Windows 7 64位

时间:2017-07-27 18:08:17

标签: python python-3.x joblib

我无法弄清楚运行程序时出现的内存错误,该程序在运行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()(或者至少不方便)有关,但我不知道如何制作使用该信息来寻找解决方案。我很感激你能给我的任何帮助。谢谢。

0 个答案:

没有答案