現在、Python 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
基本的に私のためのブラックボックスのすべてのビット、そう、私はこのシナリオでマルチスレッドモジュールを使用する方法についての少しの助けが必要です –