一次性生成多个任务 or 在一个任务中多次处理?
需求:上传Excel表,将Excel表格中的按行将数据导入到指定模板中,生成文件(word or pdf) 并提供打包下载;
暂时不讨论需求有多恶心(明明使用word邮件合并即可解决的问题。。。),我们还是得想办法解决啊。
将一条数据放在指定的模板生成pdf文件,打包下载,这些基本的都没什么问题。这里想请教的一个问题是:
我这里定义了一个队列处理生成pdf,是一次性将excel数据全部丢给队列,然后在handle中循环生成pdf?还是在response前端前将数据拆分成多个任务,循环加入队列,然后一个任务处理生成一个pdf文件?
我这里选用一次性丢给queue,但是php处理起来。。。太吃力了,不知各位有何解药没?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我觉得你其实可以就在一个队列里面处理。你说的太吃力,指的是哪方面的?是速度慢,还是会失败?
我用队列处理过10万多行的数据,但不是生成文件,而是更新插入到数据库,耗时大约在1-2小时
按照楼上所说,如果只是更新插入数据库那么确实可以放在一个队列里。但是楼主是要生成pdf,我前段时间也是遇到这个问题,我当时的需求是需要将根据商品的id生成条形码然后做成pdf的文件。如果是一次性放在队列里来生成pdf文件的话,那么写入的速度会越来越慢,但是如果向楼主所说循环导入的话,我用dompdf的库并没有像写入txt那样追加的方法,这样每次循环都会将上次循环的文件覆盖掉。
我觉得问题不是在队列和php 上,无论是那种都是很快处理逻辑的,慢是慢在生成 pdf 文件所做成的IO 损失上
看你自己业务需要。你这种就好比,一个人处理50个任务(A)和同时50个人一起处理50个任务(B),两者各有优势。A的优势是50个任务之间的消息共享,劣势就是处理慢问题;B的优势就是处理快,但各个任务直接的信息不共享(无法其他人完成了)
我觉得你既然一次性丢给queue,那就没必要用队列了,直接开多个子进程来处理
如果要用队列,就一行一行入队列,开多个进程来处理队列