私の問題は、selectなどのシステムコールの実行中にエラーが発生するEINTRシグナルが原因で発生します(間違っていない場合)。この問題はインターネットのいたるところにあり、よく説明されている解決策がありますが、それらのすべてが私のために機能していません。マルチスレッドアプリケーションでは、多くのselect呼び出しを使用します(TCPサーバーと個別にTCPクライアントがあります)。システムロックを呼び出すと(私のアプリケーションは、gnome-screensaver-commands -lockによってそれを行います)、ランダムなselectがスローされます。
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner
self.run()
File "/home/aziemek/Desktop/Zablokowanie uśpienia/server.py", line 45, in run
inputready,outputready,exceptready = select.select([self.server],[],[],TIME_TO_CHECK/2)
error: (4, 'Interrupted system call')
これが私がEINTRを捕まえる方法です:
try:
inputready,outputready,exceptready = select.select([self.client],[],[],TIME_TO_CHECK*2)
except EnvironmentError as why:
print("Blad ta :" + str(why.args[0]))
if why.args and why.args[0] != EINTR:
print("Error during server loop" + why)
else:
continue
except socket.error as why:
print("Blad ta :" + str(why.args[0]))
if why.args and why.args[0] != EINTR:
raise
else:
continue
except Exception as why:
print("Blad to :" + str(why.args[0]))
except:
print("Blad niewiadomy")
「except」句はどれもこの例外をキャッチできません-最後の2つですら。システム:Linux Ubuntu、Python2.6.5。