map_async() is required because of a bug where KeyboardInterrupt is ignored if map() is used instead. See http://stackoverflow.com/questions/1408356/keyboard-interrupts-with-pythons-multiprocessing-pool