寫了乙個 forking 多程序socket 的 server 原型
執行系統是fb。 卻發現 ctrl + c 無法關閉這個正在監聽的程式。
看**首先。 我自定義捕獲ctrl + c 訊號
在捕獲訊號裡面 使用了 sys.exit() 退出 程式。
再看下監聽部分:
不斷在監聽,是否有客戶端連線,如果產生異常就 continue 繼續回到上頭去監聽。
問題:為啥就ctrl + c 就退出不了呢。加了除錯引數(就是帶注釋的那些)研究了半天。終於明白了
ctrl +c 以後丟擲了 keyboardinterrupt 異常,而我在捕獲訊號函式裡面,又使用了 sys.exit() 方法,這個方法會丟擲 systemexit
這個看手冊才知道: this is implemented by raising the systemexit
exception
異常而覆蓋了前面的 keyboardinterrupt。 就這樣**是以 systemexit異常而跑到了 except: 異常處理區。 而異常處理區里我使用了 continue 讓程式回到監聽狀態。就這樣導致了 sys.exit() 無效了等於。 可以做個小實驗證明這個答案是否正確。 看上面**,我在異常處理區加入了 time.sleep(2) 讓程式在異常處理區卡住執行兩秒。
然後再執行這個程式。結果是。我連續按兩下 ctrl + c ,就可以正常退出了 程式。 這個很好理解了。 因為當我第一次按下 ctrl + c 的時候。程式跑到了 異常處理區而且 time.sleep(2) 兩秒。 就在這會我繼續 來多一次 ctrl + c 等於又多發出乙個異常。但這會的程式是執行在異常處理區,而異常處理區我沒有再處理這裡發生的異常了。所以這會**就執行到這裡
sys.exit() 發出了退出的異常。沒人接收這個異常的話,就直接退出了程式。
解決辦法就是。不要 捕獲 keyboardinterrupt 和 systemexit 。
iis web園多程序 與session的問題
iis 應用池設定了 web 園 多執行緒 開始發現有些頁面資訊不對。本以為是快取的問題,清除快取仍然沒有效果。進一步發現出現問題都是在使用session的頁面。net為我們提供了三種會話狀態儲存機制。一種程序內模式 問題模式 會話狀態儲存在程序內。兩種程序外模式 狀態機模式,會話狀態村處於網路狀態...
Pycharm執行多程序Pool出現的問題
在執行專案 的時候發現程式遲遲沒有結束,執行了乙個多小時也不見結束。最後通過debug發現在多程序pool.map 函式處,當執行到此處的時候,程式就陷入了死鎖,再也沒有跳出來,也沒有在繼續往下執行 若正常執行,則應該會多次列印10,但實際並沒有發生。不過我使用控制台執行程式則順利的列印出字元。列印...
Android 9 0 WebView多程序問題
問題描述 android 9.0及以上版本,多程序使用webview會引發程式崩潰。官方說明 在 android 9 中,為改善應用穩定性和資料完整性,應用無法再讓多個程序共享乙個 webview 資料目錄。如果您的應用必須在多個程序中使用 webview 例項,則您必須先使用webview.set...