jupyter notebook 使用過程中python莫名崩潰的原因及解決方式
最近在使用 Python notebook時老是出現python崩潰的現象,如下圖,誘發的原因是“KERNELBASE.dll”,異常代碼報“40000015”。
折騰半天,發現我啟動notebook時是用自定義startup.bat方式方式啟動的,bat文件的內容為
start C:Anaconda3python.exe 'C:/Anaconda3/Scripts/jupyter-notebook-script.py'
平時雙擊這個bat文件就行了,如果報這個莫名的錯誤,是因為權限不對,需要用管理員方式運行,如圖,問題解決!
補充知識:jupyter notebook占用內存空間過大打不開的解決辦法(包括但不限于爬蟲造成的)
jupyter notebook由于超過內存限制而“鎖死”的解決這兩天用爬蟲爬數據的時候由于print了大量的爬取內容,讓notebook內存溢出停止運行,連帶著localhost:8888也崩潰了。Google Chrome的處理機制應該是殺掉內存溢出的頁面,所以localhost:8888刷新一下就恢復了。
但是!我的code找不回來了!不知道是什么機制,在文件里看到的大小只有不到45MB,但是一旦從localhost:8888里面打開,(用任務管理器看的)Chrome占用的內存就遠遠超過這個數字,一直飆升到3GB的時候再次彈出來內存不足的提示,同時頁面被殺掉。用pycharm嘗試更是失敗,比Chrome還吃內存。
在經歷了各種嘗試,上網搜了也沒有發現相關情況之后,自己偶然發現了解決辦法:
如何打開源文件:
在ipynb文件的地方選擇打開方式,用Chrome瀏覽器打開,頁面的觀感類似于網頁源碼,內容是json格式的。
我能想到的幾種解決辦法:
第一種是笨辦法(核心思想:只要能夠打開源文件就可以把需要的東西復制下來),把重要的代碼復制出來,比如到txt文件里面,再把格式用的一些字符去掉,如果代碼量不是很多可以這樣做;
這是一定能成功的辦法,就是麻煩了一些,就不多說了。
第二種是重新構造一個json文件(核心思想:既然我已經知道ipynb本質是json就可以仿造構建一個可以打開的ipynb),導致問題的只是一個block,所以把有問題的block之外的所有block信息復制到一個txt文件,再重命名成ipynb,用jupyter notebook解析出來即可(甚至還可以直接繼續運行);
實際可行性:我是用的第二種辦法,實測可行,簡單快捷。要注意的是一定要把最末尾的ipynb格式信息復制上。知道ipynb構造之后,覺得自己也能寫個網頁打開ipynb的程序了(大誤)
第三種思想是用Python直接讀取ipynb文件,然后小心地把重要代碼和結果還原。(核心思想:不管后綴名是什么,只要里面是json格式就可以用Python的json包load),這種方法一定要注意的一點是,要觀察好json文件里面的構造,不要全部print!不要全部print!之前怎么死的還不長記性嗎?只要一print之前內存溢出的block就全部玩兒完,就又有了一個被鎖死的ipynb文件。
理論可行性:文件本身的大小只有幾十MB,輕輕松松就能存下,內存溢出可能是因為print的內容在網頁中占用的資源成倍增加。我沒有嘗試這么做,因為隨時需要存檔備份,小心臟受不了。
看到這兒基本上問題就應該解決了,下面補充一點問題來源和教訓
前因后果:為什么會內存溢出
這是一個“雄心勃勃”的爬蟲,要爬的東西很多,所以會長時間運行。由于微博的反爬做的很好,我不確定什么時候會被屏蔽,同時需要debug嘛,所以就隔一段時間print爬到的網頁。另外為了觀察進度還用了tqdm(非常好用,墻裂推薦),是為print的另一部分內容。時間積累了很久(大概兩天多)就卡崩潰了。
經驗教訓:
1、執行正式文件的時候還是最好備份一下,這次出問題我的結果是保存在文件里面的,是code打不開了,由于是孤本所以還是有點慌的(主要是跟微博斗智斗勇那么多天不想再搞了)
2、可以試著在文件里面寫入日志,簡單的就print也沒關系,這種長時間運行的程序還是需要考慮周全一點
附一個ipynb文件源文件格式示例:
內容是hello world!
{“cells”: [{“cell_type”: “code”,“execution_count”: 1,“metadata”: {},“outputs”: [{“name”: “stdout”,“output_type”: “stream”,“text”: [“hello world!n”]}],“source”: [“print(‘hello world!’)”]},{“cell_type”: “code”,“execution_count”: null,“metadata”: {},“outputs”: [],“source”: []}],“metadata”: {“kernelspec”: {“display_name”: “Python 3”,“language”: “python”,“name”: “python3”},“language_info”: {“codemirror_mode”: {“name”: “ipython”,“version”: 3},“file_extension”: “.py”,“mimetype”: “text/x-python”,“name”: “python”,“nbconvert_exporter”: “python”,“pygments_lexer”: “ipython3”,“version”: “3.7.3”}},“nbformat”: 4,“nbformat_minor”: 2}
以上這篇jupyter notebook 使用過程中python莫名崩潰的原因及解決方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。
相關文章: