php - 我应该使用 Laravel 队列来管理应用程序中的线程吗

标签 php multithreading laravel laravel-5.3 laravel-queue

我希望使用多个第三方 API 来收集用户搜索查询的信息。我计划为每个我想要访问的 API 分配一个线程,以最大程度地减少我的响应时间。由于内存/CPU 问题,我还想限制我的应用程序在任一时间可以运行的线程数量。

由于我使用 Laravel 作为框架,因此我尝试使用 Laravel 队列来完成此任务,但似乎我可能无法从作业获取响应数据。

  • Laravel 队列是解决这个问题的正确方法吗?如果是这样我该怎么办 监听作业的状态并在作业完成后检索数据?我看到一些事情表明该工作即将结束,但有些事情就是不适合我。

最佳答案

这要看情况。如果需要进行大量 API 调用,尤其是当这些 API 调用可能非常慢时,作业队列和工作池可能是合适的。但是,我会尽量避免所有这些架构,除非您确实确定需要它。

首先,我会考虑向外部 API 发出异步请求,并尝试将整个过程保持在单个进程中。 Guzzle HTTP client library提供了一个非常程序员友好的 API 来执行此类异步请求。

如果外部请求确实很多或者很慢,你可以考虑使用队列。但在这种情况下,您需要实现一堆逻辑来对所有作业进行排队,然后轮询直到它们完成(一路上向用户提供反馈),最后返回合并的结果。这可能最终是必要的,但我将从上面描述的更简单的实现开始。

关于php - 我应该使用 Laravel 队列来管理应用程序中的线程吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40333545/

相关文章:

php - Javascript - 在页面加载期间且仅在页面加载期间发生的 Onclick 事件

php - 查询失败:错误:日期类型的输入语法无效:“”第 5 行:合并 (''::date ,'01-01-1990'::date 之间的 att_date)

java - 线程局部变量为空

c++ - 哪个库用于迭代 1M*1k 次的并行 for 循环,OpenMP 或 boost::thread?

mysql - SQLSTATE[23000] : Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails - laravel

php - 在 Laravel 中找不到类 'User'

php - 在 Yii 中不在对象上下文中时使用 $this

vb.net - 如何在 VB.net 中指定 volatile 的等效项?

php - Laravel 框架无法启动,为什么?

php - 如何在不清除网站其他部分的情况下清除 session