Python PDFKit Celery RabbitMQ 异步问题;尝试解析表中超过 99 行时 PDF 挂起

问题描述

尝试在 Python 3.8 上使用 Celery + RabbitMQ 和 Eventlet 在 Python 3.8 上生成 pdf 时遇到一个奇怪的问题。如果我调用异步函数,例如gen_pdf.delay('source','target'),源 html 表包含超过 99 行,PDFKit2 的 wkhtmltopdf 部分永远挂在那里,没有错误,没有线索。如果我直接调用函数,例如gen_pdf('source','target'),来自调用应用程序,它可以使用相同的 html 源文件执行无限行。我已经尝试了一切来解决这个问题,我需要它异步运行的原因是有数百个报告需要迭代并且主线程陷入困境。

任何帮助将不胜感激,因为我已经在网上搜索无济于事。我已包含一个示例异步任务以供审核。

import pdfkit
from celery import Celery

async_task = Celery('async_task')
async_task.config_from_object('async.celeryconfig')

@async_task.task(name='gen_pdf')
def gen_pdf(source,target):
folder = 'some path'    
options = {
            'allow': 'F:\\inetpub\\root\\static\\','header-html': 'F:\\inetpub\\root\\static\\html\\pdf_header.html','footer-html': 'F:\\inetpub\\root\\static\\html\\pdf_footer.html','encoding': "UTF-8",'page-size': 'Letter','orientation': 'Landscape','margin-top': '0.75in','margin-right': '0.5in','margin-bottom': '0.5in','margin-left': '0.5in','footer-right': '[page] of [topage]',}
    # converting html to PDF
    pdfkit.from_file(f'{folder}{source}',f'{folder}{target}',options=options)

芹菜配置

broKER_URL = 'amqp://user:password@localhost:5672//'
broKER_HEARTBEAT = 0
broKER_POOL_LIMIT = None
broKER_TRANSPORT_OPTIONS = {'confirm_publish': True}
broKER_CONNECTION_TIMEOUT = 30
broKER_CONNECTION_RETRY = True
broKER_CONNECTION_MAX_RETRIES = 100
CELERY_RESULT_BACKEND = 'db+sqlite:///async_tasks.db'
CELERY_TRACK_STARTED = True
CELERY_ACKS_LATE = True
CELERYD_PREFETCH_MULTIPLIER = 1
CELERY_CREATE_MISSING_QUEUES = True

和启动脚本

celery worker --purge -A async_task -P eventlet -l INFO -n "PDF" -E --autoscale=25,5

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)