asyncio решит все проблемы (если освоите, конечно )) )
если как в ПХП - смотрите, например,
toly.github.io/blog/2014/02/13/parallelism-in-one-line
но aiohttp для парсинга повеселее будет
кстати, Scrapy портировали на 3й Питон уже, но сами же говорят что сыроват
касаемо мультипоточности, вот пример кода:
if __name__ == '__main__':
freeze_support()
pool = Pool(processes=8)
names = pool.imap_unordered(extract, glob.iglob(GLOBDIR), chunksize=1000)
for name in names:
extract(name)
можете поискать по кускам примеры применения
это винда, поэтому
freeze_support(), в линухе еще проще
также (processes=8) не равно числу ядер (их 12), подбирается экспериментально от загруза проца, что в win что в lin
glob.iglob(GLOBDIR) читает список файлов по маске, поскольку это итератор, а для пула нужно конкретное конечное число, используется параметр chunksize=1000
функция extract(name) расжимает файл по адресу name, парсит его lxml и вносит поля в базу, такая комбинация грузит проц на 60-80%, когда в один поток - 9-12%