В общем-то предыдущие ораторы правы, но вот чуть более развернуто:
тут зависит от того что делает функция, если нагружает процессор, например, вычислениями - берите потоки, если операция ввода/вывода(лезет в базу, скачивает файлы по сети) - предпочтительнее, на мой взгляд, взять асинхронный фреймворк, если у вас третий питон - берите
asyncio, если второй - тут выбор большой
gevent/
tornado/
twisted
P.S. если функция ничего не возвращает, то и return делать не надо