spyder開發環境之多控制檯下的多進程陷阱

       spyder是anaconda自帶的一款IDE,對於數據分析來說,是一個很好用的開發環境,筆者常用spyder來做一些開發和分析工作。筆者在一次利用spyder直接運行一個多進程腳本時,同時由於想進行其他工作,所以就多開了一個console控制檯,結果多進程腳本只執行到多進程語句pool.join()之前,之後便一直停滯。經過反覆測試,腳本本身沒有問題,最後發現,當關閉新控制檯後,腳本便可以正常運行了。

       其中的原因,筆者猜測是spyder多開的一個控制檯實際上是多開的一個python進程,並且可能在某些對用戶隱藏的控制檯層面以某種方式加了進程鎖,而控制檯進程優先搶佔到了進程鎖,只有當該進程被關閉,纔會釋放鎖,所以一旦多開了一個控制檯,那麼其他控制檯就不能執行多進程腳本,不然會被一直阻塞,導致程序無法運行,除非關閉控制檯釋放鎖。當然上述只是筆者猜測,有知道具體原因的讀者歡迎留言告知。

       重要的是,知道這種問題後,以後就可以避免這樣的隱藏問題。避免在spyder的多控制檯下執行多進程腳本,可能其他的IDE也有類似設計,以後可以多注意這種問題。所以如果要執行多進程腳本,要麼只在IDE的單控制檯下執行;如果同時要進行其他工作,則直接在命令行窗口下執行,可以開多個窗口,做多個工作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章