Python asyncore: «filedescriptor вне диапазона в select ()»

1

У меня есть скрипт python с более чем 3k исходящими соединениями сокетов, основанный на asyncore lib. Я не могу использовать select (..) из-за ограничений соединений (1024), но опрос (..) тоже не работает должным образом:

asyncore.loop(use_poll=True)

При этом вызове мое приложение игнорирует любые события сокета. Обратите внимание, что select() на менее чем 1024 сокетах работает нормально.

Где моя проблема?

  • 1
    заголовок вашего поста предполагает, что вы получили исключение. как насчет добавления трассировки стека к вашему вопросу?
  • 0
    Хорошо, stacktrace здесь: pastebin.com/WQEKtHHY Но это не связано с моим вопросом.
Показать ещё 2 комментария
Теги:
sockets
asynchronous
asyncore

1 ответ

0
Лучший ответ

Во-первых, незначительная коррекция. use_poll=True не вызывает asyncore для использования epoll (2). Это заставляет его использовать опрос (2) (более того, как работает asyncore, нет смысла пытаться использовать epoll (2), потому что накладные расходы на уровне Python asyncore перегружают любую стоимость используемого API уведомления о событиях сокета),

Во-вторых, основным недостатком asyncore является то, насколько он предоставляет вам специфические особенности платформы. Для библиотеки, которая обрабатывает больше различий между select (2) и poll (2) для вас и которая на самом деле поддерживает epoll (2), и которая лучше подходит для многих других способов, проверьте Twisted.

Если вы можете добавить более подробную информацию к своему вопросу, возможно, конкретная проблема, с которой вы сталкиваетесь в asyncore, может быть обнаружена, но на основе имеющейся информации теперь нет способа быть уверенным. Самые основные функции поддержки asyncore poll (2) действительно работают, т.е. Могут передавать сообщения чтения, записи и закрытия в тривиальный случай. Как ваше дело отличается от тривиального случая?

  • 0
    "use_poll = True не вызывает асинхронное использование epoll" - да, извините, я имел в виду poll (). Мне просто нужно обработать около 3000 сокетов одним скриптом, производительность не имеет значения. Вот мой код: pastebin.com/ttu7LJJv . Я был бы рад увидеть простой рабочий пример asyncore с poll (). Благодарю.
  • 0
    И, собственно говоря, проблема больше не актуальна, но я все же хочу ее понять.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню