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