python 程序中断_有趣的Python处理程序中断信号
我正在做一個編程項(xiàng)目——用Python編寫一個基本的P2P文件共享應(yīng)用程序。我使用兩個線程:一個主線程調(diào)用select并等待來自套接字列表的輸入系統(tǒng)標(biāo)準(zhǔn)(接收鍵入的命令)和一個助手線程,從隊(duì)列中獲取狀態(tài)更新消息并打印它們。(這是唯一能打印任何東西的東西)
我還需要捕捉標(biāo)準(zhǔn)SIGINT并處理它以優(yōu)雅地退出。我有一個quit方法可以做到這一點(diǎn);輸入'quit'作為命令就可以了。所以在主線程中,我嘗試將這個方法設(shè)置為SIGINT的處理程序。據(jù)我所知,進(jìn)程捕捉到信號并調(diào)用quit方法。helper線程打印一條消息,確認(rèn)它正在退出。但是,我從主線程收到以下錯誤消息:Traceback (most recent call last):
File "peer.py", line 226, in
main()
File "peer.py", line 223, in main
p.run()
File "peer.py", line 160, in run
readables, writables, exceptions = select(self.sockets, [], [])
select.error: (4, 'Interrupted system call')
之后程序仍然退出。而在沒有信號處理程序的情況下,發(fā)送一個SIGINT會得到以下結(jié)果:
^{pr2}$
無法終止程序;我必須停止并終止它。這是令人困惑的,因?yàn)镾IGINT似乎只在被我的自定義方法捕獲時才中斷select調(diào)用。(它只在打印隊(duì)列上放置一條消息并設(shè)置一個“done”變量)有人知道這是怎么發(fā)生的嗎?同時使用信號處理程序和線程是不是一個壞主意?在
總結(jié)
以上是生活随笔為你收集整理的python 程序中断_有趣的Python处理程序中断信号的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unity桌面设置vnc_Ubuntu
- 下一篇: 隐藏画质代码_【和平精英】变成恐怖精英?