Итак, у меня есть некоторый базовый c python код с потоком, в котором этот поток
lastread = client.read_nonblocking(1000, 0)
Это просто работает в al oop. 90% времени это работает нормально. Иногда я получаю
Traceback (most recent call last):
File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
self.run()
File "/usr/lib/python3.6/threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "/home/user/Master_Tool/r_cli.py", line 271, in listen
lastread = client.read_nonblocking(1000, 0)
File "/usr/local/lib/python3.6/dist-packages/pexpect/pty_spawn.py", line 458, in read_nonblocking
if select(0):
File "/usr/local/lib/python3.6/dist-packages/pexpect/pty_spawn.py", line 450, in select
return select_ignore_interrupts([self.child_fd], [], [], timeout)[0]
File "/usr/local/lib/python3.6/dist-packages/pexpect/utils.py", line 143, in select_ignore_interrupts
return select.select(iwtd, owtd, ewtd, timeout)
OSError: [Errno 9] Bad file descriptor
Я не могу понять, почему это иногда случается. Я работаю на Ubuntu 18.X сервер LTS. Любая помощь очень ценится. Ниже приведена вся функция потока:
def listen(client):
global listening
lock.acquire()
stillisten = listening
lock.release()
lastread = ""
while(stillisten):
time.sleep(0.2)
try:
lastread = client.read_nonblocking(1000, 0)
except pexpect.exceptions.TIMEOUT:
continue
except pexpect.exceptions.EOF:
break
if len(lastread)>0:
lastread = lastread.decode("utf-8")
reply(lastread)
lastread = ""
lock.acquire()
stillisten = listening
lock.release()
lock.acquire()
client.close(force=True)
global gclient
gclient = None
lock.release()