LINUX.ORG.RU

Python потоки сокеты


0

0

Питон учу второй день, не пинайте сильно)
В общем на нижеследующем коде вылетает ошибка.
Здесь запускается поток
..
self.servsock.listen(1)
csock , caddr = self.servsock.accept()
onconnect(self.servsock,csock,caddr)
t = threading.Thread(target = self.client_handle,name = csock,args=[csock,onread])
print "Starting new thread for client"
t.start()
..
Это функция которую запускает поток

def client_handle(self,sock,proc):
print "Beginning handle with sock %s" % sock
while(1):
recv = sock.recv(1)
proc(sock,recv)
sock.close()

И при выходе из sock.recv() вылетает трэйсбэк ссылаясь на нехороший дескриптор файла (исключение EBADF Bad File Descriptor) в модуле socket.py

Что не так?


Ответ на: комментарий от anonymous

> Зачем потоки при работе с сокетами?

Чтобы грузить все доступные процессоры.

На самом деле лучше всего работает гибрид потоков + что-то типа select(2).

execve
()
Ответ на: комментарий от anonymous

Ну в данном случае можно и select, а если вообще из потока требуется читать сокет, то получается нехорошо, может руки кривые или аура непрокачана..

nnkd
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.