현재 파이썬 pdfkit 및 jinja를 사용하여 PDF 보고서를 생성하는 도구를 작성 중입니다.멀티 스레딩을 사용하는 python dict 빌드
이 보고서는 많은 정적 HTML과 보고서 용 데이터 및 이미지 (차트)를 생성하는 약 30 개의 함수를 기반으로합니다. 이 함수는 모두 pyodbc 또는 pandas from_sql을 통해 외부 데이터에 액세스합니다.
현재 성능 문제가 발생하고 있으며 보고서 작성에는 약 5 분이 소요됩니다.
데이터 사전을 작성하기 위해 멀티 스레딩을 활용하고 싶지만 문제에 접근하는 방법을 파악하지 못했습니다.
현재 코드는 다음과 같습니다.
def buildReport():
if checkKvaegCVR(SQL = checkKvaegCVRSQL(cvrNummer = cvrNummer), cursor = OEDBCursor):
env = Environment(loader=FileSystemLoader('.'))
template = env.get_template("templates/kvaeg/kvaegBase.html")
pdfOptions = {
'page-size': 'A4',
'margin-top': '0.75in',
'margin-right': '0.75in',
'margin-bottom': '0.75in',
'margin-left': '0.75in',
'quiet': '',
'encoding': "UTF-8",
'footer-right': '[page]'
}
css = 'static/css/style.css'
template_vars = {'kvaegForsideBillede': imageBuilder()['kvaegForsideBillede'],
'bagsideBillede': imageBuilder()['bagsideBillede'],
'navn' : bedriftAdresse(cvrNummer = cvrNummer,
cursor = KundeAnalyseDBCursor)[0],
'adresse' : bedriftAdresse(cvrNummer = cvrNummer,
cursor = KundeAnalyseDBCursor)[1],
'postnrBy' : str(int(bedriftAdresse(cvrNummer = cvrNummer, cursor = KundeAnalyseDBCursor)[2])) + ' ' +
bedriftAdresse(cvrNummer = cvrNummer, cursor = KundeAnalyseDBCursor)[3],
'fremstillingsprisKorr': imageBuilder()['fremstillingsprisKorr'],
'fremstillingsprisForbedring':imageBuilder()['fremstillingsprisForbedring'],
'graesoptagelse':kgGraesPrKo(),
'indreSaedskifteKort':indreSaedskifteKortPNG(CVRPunkt = CVRPunkt(cvrNummer, KundeAnalyseDBCursor),
CVRBuffer = CVRBuffer(cvrNummer, KundeAnalyseDBCursor),
indreSaedskifteKort = indreSaedskifteKort(indreSaedskifteKortSQL = indreSaedskifteKortSQL(cvrNummer = cvrNummer), cursor = KundeAnalyseDBCursor)),
'naboKort':naboKortPNG(CVRPunkt = CVRPunkt(cvrNummer = cvrNummer, cursor = KundeAnalyseDBCursor),
CVRBuffer = CVRBuffer(cvrNummer = cvrNummer, cursor = KundeAnalyseDBCursor),
naboKort = naboKort(naboMarkerSQL = naboMarkerSQL(cvrNummer = cvrNummer),
egneMarkerSQL = egneMarkerSQL(cvrNummer = cvrNummer),
cursor = KundeAnalyseDBCursor))
...
...
30 more functions here
...
...}
pdfkit.from_string(template.render(template_vars), 'KvaegRapport - {}.pdf'.format(cvrNummer), options=pdfOptions, css=css)
print('Rapporten er klar')
else:
print('Kan ikke bygge rapport på dette CVR nummer')
(아마 내 주요 기능을 외부) 내가 멀티 스레딩을 사용하여 사전 "Template_vars"를 구축하고자하는
어떤 제안이?
당신은'threading' 모듈을 사용하여 도움이 필요합니까? 아니면'dict'에 대한 멀티 스레드 접근에 관심이 있습니까? – birryree
기본적으로 나에게 약간의 블랙 박스가 있기 때문에이 시나리오에서 멀티 스레딩 모듈을 사용하는 방법에 대한 약간의 도움이 필요합니다. –