如何为多个用户运行php脚本?

时间:2019-01-30 13:41:18

标签: php multithreading web

我在php脚本(example.php)中得到了一些代码。该脚本运行大约30-60秒,并对一个用户执行一些操作。

Example.php仅为1个给定用户运行atm,循环遍历users表并为每个用户运行此脚本的最佳方法是什么?

该脚本现在每隔约5分钟被调用一次,因此应该保持不变,并期望为每个用户启动该脚本。

我正在Web服务器上运行PHP7.2,并且已经使用cronjobs对其进行了尝试。这仅适用于一个硬编码用户。如果我将所有用户的循环放入该脚本中,那么运行时间将是巨大的。我尝试在plesk上安装pthreads,但这也有些复杂。

如前所述,它已经可以为一个用户使用,但是我不知道让它为所有用户运行的最佳方法是什么。

3 个答案:

答案 0 :(得分:1)

当前,当我需要并行运行许多PHP脚本时,我的工作是一方面使用bernard之类的队列系统,您将拥有一个启动器脚本,该脚本会将任务推入队列(例如,在Redis服务器)。这将由cron作业完成。每5分钟将调用启动程序脚本,该脚本会将每个用户的一项任务推入队列,因为您可以将参数推入队列,所以可以将用户作为参数推入任务。

另一方面,您有任意数量的侦听器,例如,可以由monit管理侦听器进程。这些侦听器正在等待队列中的任务独立处理,每当他们找到可以执行的任务时,他们都会执行该任务,这样您就可以按照自己的意愿执行任意多个任务。

您当前与用户一起执行的操作是在侦听器代码中编写的内容。这只是解释整个问题的一种简单方法,我鼓励您通读bernard documentation,这会更清楚。

答案 1 :(得分:0)

我的解决方案是遍历所有用户并从循环内调用函数,但是如果您说这花了很长时间,我看不出有什么方法可以加速

我认为无法通过cronjob给用户带来帮助。 您有供我们参考的代码段吗?

答案 2 :(得分:0)

您可以使用shell_exec以各种user_id作为参数来执行php文件。

shell_exec("/path/to/php /path/to/example.php '".$user_id."' 'alert' >> /path/to/your_log/result.log &");

符号很重要,因为它告诉服务器将该进程作为后台运行。

OR

您可以实现一些队列系统并将工作推送作为后台进程。

希望有帮助。