使用CURL使用cronjob进行PHP多处理

使用CURL使用cronjob进行PHP多处理,php,multithreading,curl,cron,multiprocessing,Php,Multithreading,Curl,Cron,Multiprocessing,我需要做的是使用PHP处理数据库中挂起的多个请求 我目前想做的是: 当我的工作运行时。我想立即调用一个文件“process_a.php”10次,而不用等待它完成处理(process_a.php可能需要几分钟) 我试着用卷曲来做这个。但就在我的cronjob调用process_a.php时,它会等待它完成处理并返回,然后再调用另一个process_a.php文件 我甚至尝试将代码放入process_a.php中以立即关闭连接,然后在后台继续处理。但工作仍在等待完成 我只希望同一个文件一次执行10次

我需要做的是使用PHP处理数据库中挂起的多个请求

我目前想做的是: 当我的工作运行时。我想立即调用一个文件“process_a.php”10次,而不用等待它完成处理(process_a.php可能需要几分钟)

我试着用卷曲来做这个。但就在我的cronjob调用process_a.php时,它会等待它完成处理并返回,然后再调用另一个process_a.php文件

我甚至尝试将代码放入process_a.php中以立即关闭连接,然后在后台继续处理。但工作仍在等待完成

我只希望同一个文件一次执行10次,就像10个不同的用户请求我网站的index.php页面一样。。。
有什么想法吗

分成10个过程:

 <?php
 for($i = 0; $i < 10;$i++){
     $pid = pcntl_fork():
     if ($pid == -1) {
          trigger_error('could not fork');
     } else if (!$pid) {
          //we are the child now
           require 'process_a.php';
     } else {
         // we are the parent, you could do something here if need be.
     }
 }

分为10个过程:

 <?php
 for($i = 0; $i < 10;$i++){
     $pid = pcntl_fork():
     if ($pid == -1) {
          trigger_error('could not fork');
     } else if (!$pid) {
          //we are the child now
           require 'process_a.php';
     } else {
         // we are the parent, you could do something here if need be.
     }
 }

您是否有完整的cron可用,还是只能指定php文件

您可能可以使用xargs通过
-p
参数来分叉10个进程

seq `1 10`|xargs -n1 -P10 php /path/to/file.php

您是否有完整的cron可用,或者您只能指定php文件

您可能可以使用xargs通过
-p
参数来分叉10个进程

seq `1 10`|xargs -n1 -P10 php /path/to/file.php

正如@Brad curl告诉我们的,multi-exec应该是一个选项


正如@Brad curl告诉我们的,multi-exec应该是一个选项



默认情况下,pcntl_分叉不可用。你认为它值得安装吗?如果我有7个不同的文件,每个文件都要调用10次,那么这会起作用吗?我使用CURL是因为处理逻辑在某个时候可能在不同的服务器上。我从未见过一个服务器有cronjobs,但没有
pcntl\u fork
的功能。如果你需要单独安装,是的,我认为这是值得的。如果您想要10 x 7个不同的文件,当然,这也可以(但是,fork 70次)。如果您正在准备一个真正的分布式应用程序,我宁愿看一看(它甚至可以池服务器),然后看
curl
解决方案(但这需要更多的安装)。默认情况下,PHP中的安装过程控制支持不启用。编译PHP以启用过程控制支持时,必须使用--enable pcntl配置选项编译PHP的CGI或CLI版本。注意:目前,此模块在非Unix平台(Windows)上不起作用。默认情况下,pcntl_分叉不可用。你认为它值得安装吗?如果我有7个不同的文件,每个文件都要调用10次,那么这会起作用吗?我使用CURL是因为处理逻辑在某个时候可能在不同的服务器上。我从未见过一个服务器有cronjobs,但没有
pcntl\u fork
的功能。如果你需要单独安装,是的,我认为这是值得的。如果您想要10 x 7个不同的文件,当然,这也可以(但是,fork 70次)。如果您正在准备一个真正的分布式应用程序,我宁愿看一看(它甚至可以池服务器),然后看
curl
解决方案(但这需要更多的安装)。默认情况下,PHP中的安装过程控制支持不启用。编译PHP以启用过程控制支持时,必须使用--enable pcntl配置选项编译PHP的CGI或CLI版本。注意:目前,此模块在非Unix平台(Windows)上不起作用。这意味着什么?你是说我应该把它放在这里,而不是调用cronjob.php?我需要运行cronjob.php来决定此时应该处理哪些请求。这意味着什么?你是说我应该把它放在这里,而不是调用cronjob.php?我需要运行cronjob.php来决定此时应该处理哪些请求。您给出的路径是什么?如果您提供了完整的URL,它将如何知道这是否是同一个服务器。?另外一种测试方法是在process_a.php顶部以毫秒为单位打印时间,然后您可以检查页面是否一次调用一个。我认为我的服务器检测到来自同一用户的多个请求,并且不允许这样做。例如,如果我在浏览器中加载索引页5次,它们将逐个加载。这就像是一个会议?idk D:我会检查以确保它不是其他问题……一个简单的测试是使用contents:创建一个time.php,并使用curl多句柄调用这个脚本。。检查不同句柄之间的时间差…@StephenSarcsamKamenar:用测试结果检查我编辑的答案。有趣。当我在cronjob中尝试调用process_a.php文件时,它们以大约10秒的延迟一个接一个地执行。当我运行一个像你展示的简单测试时,它工作得非常完美。。。我会再测试一些,当我有更多关于为什么我的cronjob版本不能正常工作的信息时,我会告诉你…你给出的路径是什么?如果您提供了完整的URL,它将如何知道这是否是同一个服务器。?另外一种测试方法是在process_a.php顶部以毫秒为单位打印时间,然后您可以检查页面是否一次调用一个。我认为我的服务器检测到来自同一用户的多个请求,并且不允许这样做。例如,如果我在浏览器中加载索引页5次,它们将逐个加载。这就像是一个会议?idk D:我会检查以确保它不是其他问题……一个简单的测试是使用contents:创建一个time.php,并使用curl多句柄调用这个脚本。。检查不同句柄之间的时间差…@StephenSarcsamKamenar:用测试结果检查我编辑的答案。有趣。当我在cronjob中尝试调用process_a.php文件时,它们以大约10秒的延迟一个接一个地执行。当我运行一个像你展示的简单测试时,它工作得非常完美。。。我会再测试一些,当我有更多关于为什么我的cronjob版本不能正常工作的信息时,我会告诉你。。。
0.27085300 1340214659
0.44853600 1340214659
0.46611800 1340214659
0.48201000 1340214659
0.50209400 1340214659
0.48233900 1340214659
0.52274300 1340214659
0.54757800 1340214659
0.57316900 1340214659
0.59475800 1340214659