我有一些代碼可以生成數以千計的發票作爲PDF,然後將它們寫入一個zip文件,然後通過HttpStreamingResponse(django)抽出它。 PDF的生成是真的是緩慢,目前單線程。順序處理多線程輸出
我可以很快生成PDF的源HTML。我想:
- 生成所有的HTML(單線程,數據庫無法處理的併發查詢)
- 這些轉換到PDF,在8個線程
- 同步方式處理PDF文件的輸出所以我可以將它添加到我的zipstream文件中。
我已經涉足multiprocessing.Pool之前,但我不知道如何正確地做到這一點。這是一些非常近似的代碼。
def generate_statements(request):
htmls = [generate_html(customer) for customer in customers]
pdfs = [generate_pdf(html) for html in htmls]
# create zip file
for pdf in pdfs:
zip.writestring(...)
# output this to browser
def generate_html(customer):
# do something that returns a string of HTML
def generate_pdf(html):
# do something that creates a single pdf
如果有,開始轉換HTML的HTMLS完成之前,甚至更好,但我需要處理的generate_pdf
線性的輸出方式的選擇;我無法同時寫入zip。
(PS:我知道一些事情聽起來像功課,但請看看我的網絡配置文件,你認爲我是一個懶惰的學生之前......我是一個懶惰的專業程序員thankyouverymuch)
我會用[線程](https://docs.python.org/dev/library/threading.html)和[隊列]去(https://docs.python.org /dev/library/queue.html)。我猜測生成PDF的實際工作是由外部程序完成的;如果是這樣,我會避免[multiprocessing](https://docs.python.org/dev/library/multiprocessing.html),因爲它會增加不必要的開銷。 –
「數據庫無法處理併發查找」 - 獲得更好的數據庫可能是一個好的開始...... – twalberg