W dniu 20.01.2014, 21:05, Stachu 'Dozzie' K. pisze:
> On 2014-01-20, Paweł <j...@nie.doczekal> wrote:
>> piszę skrypt odpytujący po SNMP kilka tysięcy hostów. używam biblioteki
>> net-snmp-perl, sesje snmp puszczam w trybie non-blocking. wszystko
>> działa pięknie ale chciałbym ograniczyć liczbę równolegle uruchomionych
>> sesji snmp. osiągam limit na ilość otworzonych plików i 1019 sesja już
>> się nie tworzy.
>
> ulimit -n, /etc/security/limits.conf
>
urządzeń jest coś 40 000. nie chcę aż tak limitów zwiększać.
>> w tej chwili mam coś mniej więcej
> [...]
>> chciałbym raczej
>>
>> while (są jeszcze hosty do zbadania) {
>> jak jest już uruchomionych LIMIT sesji poczekaj
>> pobierz z bazy dane następnego hosta
>> stwórz dla niego obiekt SNMP::Session
>> odpal session->get
>> }
>>
>> jakiś pomysł jak to osiągnąć?
>
> Pula wątków?
>
> Możesz obejrzeć jak ja to zrobiłem (na procesach) dla połączeń XML-RPC
> w skrypcie xmlrpcaller:
http://dozzie.jarowit.net/git?p=xmlrpcd.git
> Chociaż ten kod generalnie jest brzydki.
> Interesuje cię funkcja multicall() i pakiety Worker::Spool
> i Worker::Spool::Child zdefiniowane pod koniec xmlrpcallera.
>
pula wątków nie rozwali mi non-blocking snmp? czekania w
SNMP::MainLoop(); na koniec przetwarzania, i SNMP::finish(); w
procedurze callback w session->get() ?
--
Paweł