Мой Python код предназначен для извлечения информации из XML файлов и загрузки ее в базу данных. Эти файлы называются номерами 11582.xml
, 5300593.xml
, et c. и у меня есть около 1 миллиона файлов.
Я создал код, и он работает нормально. Я столкнулся с проблемой, что код не занимает полную емкость процессора / памяти / диска. Мой процессор должен использовать максимум 20%.
Я спросил здесь и в других местах и обнаружил, что мне нужно использовать многопоточность, чтобы использовать полную емкость. Поэтому я должен изменить свой сценарий для принятия многопоточности. Я сделал это, но по-прежнему не работает до максимума.
Что я сделал не так? и как это исправить?
Мой код:
import pymssql
import pyodbc
import pandas as pd
import thread
import glob
import xml.etree.ElementTree as ET
conn = pyodbc.connect('Driver={SQL Server};'
'Server=Server123;'
'Database=NLP;'
'Trusted_Connection=yes;')
cursor = conn.cursor()
def ExtractData(ThreadName):
for file in glob.glob("H:\\datas_Output\\xmldata\\" & ThreadName & "*.xmi"):
filename = file[24:-8]
tree = ET.parse(file)
root = tree.getroot()
for Tag in ['Kitkat', 'Snickers', 'Bounty']:
iTag = '{textsem.ecore}' + Tag
for country in root.findall(iTag):
XMIID = country.get('{XMI}id')
sofa = country.get('sofa')
cursor.execute("INSERT INTO Tags (filename,tag,xmiid,sofa) VALUES (?,?,?,?)", filename, Tag, XMIID, sofa)
try:
thread.start_new_thread( ExtractData, ("1") )
thread.start_new_thread( ExtractData, ("2") )
except:
print("Error: unable to start thread")
conn.commit()