㈠ python中主線程怎樣捕獲子線程的異常
最近因為別的需求,寫了一個模塊,似乎在這里能用得上:
https://github.com/SakuraSa/ChatProcess
其中的 example.py :
#!/usr/bin/envpython
#coding=utf-8
"""
example
"""
__author__='Rnd495'
fromtimeimportsleep
fromChatProcessimportChatroom
classEcho(Chatroom):
"""
Echo
"""
defresponse(self,data):
ifdata.startswith('sleep'):
sec=float(data[6:])
sleep(sec)
return'wakeupafter%dms'%(sec*1000)
elifdata:
returndata
else:
self.stop()
return'goodbye'
if__name__=='__main__':
,ProcessError
print'process01:'
e=Echo.create_process(lifetime=1).start()
printe.chat('Helloworld!'),e.remain
printe.chat('sleep:0.1'),e.remain
printe.chat(''),e.remain
print''
print'process02:'
e=Echo.create_process(lifetime=1).start()
try:
printe.chat('Helloworld!'),e.remain
printe.chat('sleep:1.0'),e.remain
printe.chat(''),e.remain
exceptTimeoutError,error:
print'error:',error
print''
print'process03:'
e=Echo.create_process(lifetime=1).start()
try:
printe.chat('Helloworld!'),e.remain
printe.chat('sleep:notanum'),e.remain
printe.chat(''),e.remain
exceptProcessError,error:
print'error:',error
運行結果為:
process01:
Helloworld!0.773000001907
wakeupafter100ms0.549000024796
goodbye0.547000169754
process02:
Helloworld!0.868000030518
error:TimeoutError
process03:
Helloworld!0.868000030518
error:('Erroroccurredonloop',ValueError('couldnotconvertstringtofloat:notanum',))
在其中的 process01 中,主進程捕獲了 超時
在其中的 process02 中,主進程捕獲了 子進程的錯誤
不知道你能不能用得上