Is there any reason why you must use an external SNMP query?
NET::SNMP has a good non-blocking SNMP dispatcher which will go all 500+ queries in next to no time, with very little overhead.
Have a quick look at this writeup: Re^3: threads and SNMP Session for an example of how.