слишком много потоков из-за синхронизации - PullRequest
0 голосов
/ 11 мая 2010

Я использую потоки и xmlrpclib в python одновременно. Периодически я создаю группу потоков для завершения обслуживания на удаленном сервере через xmlrpclib. Проблема в том, что иногда удаленный сервер не отвечает. Это заставляет поток вечно ждать ответа, который он никогда не получает. Со временем количество потоков в этом состоянии увеличивается и достигает максимального количества разрешенных потоков в системе (я использую fedora). Я пытался использовать socket.setdefaulttimeout (10); но создаваемое исключение приведет к тому, что сервер перестанет работать. Я использовал его на стороне сервера, но кажется, что он не работает: /

Есть идеи, как мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 17 ноября 2010

Вы делаете то, что я обычно называю (первоначально на испанском xD) "счастливое программирование дороги". Вы должны реализовывать свои программы для обработки нежелательных случаев, а не только тех, с которыми вы хотите столкнуться.

Потоки здесь показывают только основную ошибку: ваш сервер не может обработать тайм-аут, а реализация жесткая в том смысле, что добавление тайм-аута вызывает сбой сервера из-за необработанного исключения.

Реализуйте его более надежно: он должен выдерживать исключение, серверы не могут умереть из-за неправильного поведения клиента. Если вы не решите эту проблему сейчас, у вас могут возникнуть подобные проблемы позже.

0 голосов
/ 11 мая 2010

Кажется, что ваша настоящая проблема в том, что сервер зависает при определенных запросах, и умирают, если клиент закрывает сокет - потоки являются лишь побочным эффектом реализации. Если я правильно понимаю, что вы говорите, то единственный способ исправить это - это заставить сервер отвечать на все запросы, или быть более устойчивым к сбоям в сети, или (желательно) к обоим.

...