Не уверен, что это тот код, который вы используете.
Пара поправок, которые я хотел бы сделать.
Оригинал:
def xml2db(file):
s=pq(open(file,"r").read())
dict={}
for field in g_fields:
dict[field]=s("field[@name='%s']"%field).text()
p=Product()
for k,v in dict.iteritems():
if v is None or v.strip()=="":
pass
else:
if hasattr(p,k):
setattr(p,k,v)
session.commit()
Обновлено:
удалите использование dict, это создание дополнительных объектов, итерация и сбор.
def xml2db(file):
s=pq(open(file,"r").read())
p=Product()
for k in g_fields:
v=s("field[@name='%s']"%field).text()
if v is None or v.strip()=="":
pass
else:
if hasattr(p,k):
setattr(p,k,v)
session.commit()
Вы можете профилировать код с помощью профилировщика Python.
Это может сказать вам, где проходит время.
Это может быть в session.Commit () это может потребоваться уменьшить до каждой пары файлов.
Я понятия не имею, что он делает, так что это действительно удар в темноте, вы можете попробовать запустить его без отправки или записи какого-либо вывода.
Если вы можете разделить ваш код на чтение, обработку и запись.
A) Вы можете видеть, сколько времени занимает чтение всех файлов.
Затем, загрузив один файл в память, достаточно времени для представления всей работы без дополнительного чтения IO.
Б) Стоимость обработки
Затем сохраните целую кучу сессий, представляющих размер вашей работы.
В) Стоимость продукции
Проверка стоимости каждого этапа в отдельности. Это должно показать вам, что занимает больше всего времени, и если какие-либо улучшения могут быть сделаны в любой области.