Ответ зависит от сложности парсинга, на самом деле.
Если у вас в парсинге большую часть времени занимает общение с сайтом, а затраты на сам парсинг минимальны, то можно обойтись без многопоточности, если использовать что-то типа
aiohttp.
Оно может работать в одном рабочем цикле (реакторе) с остальным ботом, и не подвешивать его на время запроса к сайту.
Если же в парсинге значительную долю времени занимают вычисления, то тут уже нужна многопоточность, или даже многопроцессность.
Наконец, стоит использовать либо asyncio.Queue (без потоков) либо queue.Queue (с потоками), чтобы организовать передачу итогов парсинга боту. В первом случае бот может просто в цикле await'ить метод get() очереди, и по получению очередного блока данных формировать и отправлять сообщение.