Если исходить из предположения, что такие случаи отсутствия данных не редкие, а парсинг с добавлением данных в базу занимает ощутимое время и пользователь может подождать, то я бы, наверное, сделал следующее.
1) Завёл бы персистентную очередь заданий, например с помощью Redis или воспользовался бы уже имеющейся базой.
2) С помощью механизма
PeriodicCallback периодически проверял бы эту очередь и ...
3) Запускал бы парсинг через Subprocess или
joblib
Можно всё это делать и внутри Tornado, добавляя задачи в IOLoop - но есть риск, что в какой-то момент сервер будет занят преимущественно парсингом, а не обработкой реквестов с фронтенда.