asyncore
ドキュメントによるとasyncore.loop()
、タイムアウト パラメータがあり、デフォルトは 30 秒です。したがって、明らかにデフォルトはすでに 30 秒である必要があります。自分のニーズに合わせて試してみることができます。
timeout 引数は、適切な select() または poll() 呼び出しのタイムアウト パラメータを秒単位で設定します。デフォルトは 30 秒です。
poll()
わかりました、上記は実際にはまたはタイムアウトを指してselect()
おり、アイドルタイムアウトではありません。このページに従って、非同期コアをハックして、次のようなタイムアウトをサポートできます。
asyncore.poll
ブロックの直後の独自のコピーに次のブロックを追加しますfor fd in e:
...
#handle timeouts
rw = set(r) + set(w)
now = time.time()
for f in (i for i in rw if i in map):
map[f].lastdata = now
for j in (map[i] for i in map if i not in rw):
if j.timeout+j.lastdata now:
#timeout!
j.handle_close()
インスタンスごとに .timeout および .lastdata メンバーを初期化する必要がありますが、それほど悪くはありません (タイムアウトしないソケットの場合、実際には 1 時間または 1 日のタイムアウトをお勧めします)。