微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。