一次性生成多个任务 or 在一个任务中多次处理?

需求:上传Excel表,将Excel表格中的按行将数据导入到指定模板中,生成文件(word or pdf) 并提供打包下载;

暂时不讨论需求有多恶心(明明使用word邮件合并即可解决的问题。。。),我们还是得想办法解决啊。

将一条数据放在指定的模板生成pdf文件,打包下载,这些基本的都没什么问题。这里想请教的一个问题是:

我这里定义了一个队列处理生成pdf,是一次性将excel数据全部丢给队列,然后在handle中循环生成pdf?还是在response前端前将数据拆分成多个任务,循环加入队列,然后一个任务处理生成一个pdf文件?

我这里选用一次性丢给queue,但是php处理起来。。。太吃力了,不知各位有何解药没?

阅读 4k
5 个回答

我觉得你其实可以就在一个队列里面处理。你说的太吃力,指的是哪方面的?是速度慢,还是会失败?
我用队列处理过10万多行的数据,但不是生成文件,而是更新插入到数据库,耗时大约在1-2小时

按照楼上所说,如果只是更新插入数据库那么确实可以放在一个队列里。但是楼主是要生成pdf,我前段时间也是遇到这个问题,我当时的需求是需要将根据商品的id生成条形码然后做成pdf的文件。如果是一次性放在队列里来生成pdf文件的话,那么写入的速度会越来越慢,但是如果向楼主所说循环导入的话,我用dompdf的库并没有像写入txt那样追加的方法,这样每次循环都会将上次循环的文件覆盖掉。

我觉得问题不是在队列和php 上,无论是那种都是很快处理逻辑的,慢是慢在生成 pdf 文件所做成的IO 损失上

看你自己业务需要。你这种就好比,一个人处理50个任务(A)和同时50个人一起处理50个任务(B),两者各有优势。A的优势是50个任务之间的消息共享,劣势就是处理慢问题;B的优势就是处理快,但各个任务直接的信息不共享(无法其他人完成了)

我觉得你既然一次性丢给queue,那就没必要用队列了,直接开多个子进程来处理
如果要用队列,就一行一行入队列,开多个进程来处理队列

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题