gpt4 book ai didi

PHP:多线程 PHP/Web 服务?

转载 作者:可可西里 更新时间:2023-11-01 08:38:23 25 4
gpt4 key购买 nike

大家好!

我在如何对 Web 服务 (eBay) 执行成千上万个请求方面遇到了一些麻烦,我每天有 500 万次调用的限制,所以这方面没有问题。

但是,我正在尝试弄清楚如何每分钟到每 5 分钟处理 1,000 - 10,000 个请求。

基本上流程是:1) 从数据库中获取项目列表(1,000 到 10,000 项)2) 对每个项目进行 API POST 请求3)接受返回数据,处理数据,更新数据库

显然,单个 PHP 实例在循环中运行它是不可能的。

我知道 PHP 不是多线程语言。

我尝试了 CURL 解决方案,基本上:1)从数据库中获取项目列表2) 初始化多 curl session 3)为每个项目添加一个 curl session 的请求4) 执行多 curl session

因此您可以想象发生 1,000-10,000 个 GET 请求...

没关系,在大约一两分钟内发生了大约 100-200 个请求,但是,实际处理的 1,000 个项目中只有 100-200 个,我认为我正在达到某种 Apache 或 MySQL 限制?

但这确实会增加延迟,这几乎就像对我自己进行 DoS 攻击一样。

我想知道你会如何处理这个问题?如果您必须根据 Web 服务的返回数据发出 10,000 个 Web 服务请求和 10,000 个 MySQL 更新,该怎么办...而这需要至少在 5 分钟内完成。

我在 Zend Framework 中使用 PHP 和 MySQL。

谢谢!

最佳答案

我不得不做类似的事情,但使用 Facebook,每小时更新 300,000 多个配置文件。正如 grossvogel 所建议的那样,您需要使用许多进程来加快速度,因为脚本大部分时间都在等待响应。如果您的 PHP 安装支持 fork ,您可以使用 fork 来执行此操作,或者您可以通过命令行执行另一个 PHP 脚本。

exec('nohup /path/to/script.php >> /tmp/logfile 2>&1 & echo $!'), $processId);

您可以在命令行上将参数(getopt)传递给 php 脚本,以告诉它要处理哪个“批处理”。您可以让主脚本执行 sleep /检查循环,通过检查进程 ID 来查看脚本是否仍在运行。我测试过以这种方式同时运行多达 100 个脚本,此时 CPU 负载可能会变得相当高。

将多个进程与 multi-curl 相结合,您应该可以轻松地完成所需的工作。

关于PHP:多线程 PHP/Web 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1813165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com