Как спроектировать парсер нескольких сайтов в «реальном времени» на Python?
Парсинг в реальном времени зло которое замедлить всю вашу систему. А не проще ли индексировать сайты в базу данных и от туда выдавать результаты? Можно запускать задачи парсинга например раз 10 минут, чего будет достаточно.  
Параллелизм обычно делается потоками.  Можно почитать тут https://habrahabr.ru/post/229767/, https://habrahabr.ru/post/78267/
.
Для организации тасков можете какую нибудь целюру использовать
Пользователь делает запрос в твою СУБД и получает данные оттудаесли для каждого сайта будет свой небольшой скрипт-парсер, то их запускать последовательно или параллельно? Если параллельно, то как это делается?scrapy. Под каждый сайт пишем скрапер. Запускаем по расписанию. Парсинг сайтов можно разнести во времени, чтоб они не забивали ресурсы. Если долбить сайты без расписания - они могут обидется и забанитькак (в общих чертах) реализовать отдачу результатов поиска пользователю по мере того, как сайты будут парситься?никак, такое делать не стоит. Все что на момент запроса пользователя было, то он и должен получить