Глядя на код продукта я не вижу никакой точки сохранения транзакции, поэтому я думаю, что реальная проблема заключается в том, что вашему серверу не хватает памяти из-за огромного размера одной транзакции и зависает, потому что начинает обмениваться. Попробуйте отслеживать использование памяти вашего сервера и при необходимости добавлять этот код каждые N элементов, обработанных во время импорта:
import transaction
...
transaction.savepoint(optimistic=True)
Это сделает «суб-транзакцию» транзакции, перемещая данные из памяти на жесткий диск.
Обязательно выберите подходящее измерение N: для очень больших транзакций вы рискуете сэкономить память и уйти с дискового пространства, потому что каждая точка сохранения умножает измерение данных на жестком диске.
Подробнее: http://docs.zope.org/zope3/Book/zodb/savepoints/show.html