在后台一次运行30个PHP脚本

时间:2009-11-28 01:25:34

标签: php multithreading

我有一个PHP脚本必须运行30个并行时间,每个脚本使用不同的参数。这样做的最佳方法是什么,以便每个脚本尽可能多地接触处理器?

5 个答案:

答案 0 :(得分:2)

问题描述

像其他一些用户所说的那样(我也是)你应该给出更多解释(可能是代码示例)。例如,当调用php脚本时,这些任务是应该运行还是只运行一次?

消息队列

首先,我认为如果可能的话,应该避免一次运行这么多任务,而是使用消息队列(例如beanstalkd

安排(对PC很温和)

PHP解决方案

由于线程模型(不),我不认为PHP是适合您的问题的工具。线程很轻,创建新进程很重。你可以像stroncium一样解释。我的观点是,在共享主机上运行此代码将不受重视,因为如果所有用户都运行长时间运行的进程,他们将过度利用(使用太多的PC)服务器。

来自nettuts的Quoto

  

没有比PHP的创建者更好的资源来了解PHP的功能。 Rasmus Lerdorf于1995年创建了PHP,从那时起,语言就像野火一样蔓延到开发者社区,改变了互联网的面貌。但是,Rasmus没有用这个意图创建PHP。 PHP是出于解决Web开发问题的需要而创建的。

     

但是,您不能将PHP用于所有内容。 Lerdorf是第一个承认PHP实际上只是工具箱中的工具的人,即便是PHP也有局限性。

更好的语言

就像我之前说过的,我不认为PHP是正确的工具。 我认为有些语言可以更好地解决问题:

  • 的java
  • C

当然,支持线程模型的许多语言都是适合这项工作的工具,但PHP并不是为这样的任务设计的。甚至php Rasmus的创造者也证实了这一点。你可以在nettuts的这份清单上看到这个,我认为这有点非常好。

Google应用引擎

最后我建议你看一下来自google app engine的taskqueu api。因为这也是一个很好的选择;)。我甚至认为这是最好的选择。如果您超出报价,您将获得免费报价并且费用是公平的。任务队列使用webhooks,以便钩子可以用PHP编码。

答案 1 :(得分:1)

PHP本身没有线程支持。但是你可以使用popen()或proc_open()同时运行几个脚本副本。 有时multiurl用于此目的(当popen和alikes被重新定义时)。

答案 2 :(得分:1)

我认为你不必担心它的CPU亲和力(这么多),它如何限制每个进程的I / O绑定(请原谅​​双关语)成为。

如果使用类似UNIX的操作系统,您可以尝试使用nice命令调整您预测将执行更多磁盘/网络/数据库访问的进程,但我认为您不会看到任何显着的加速。

如果所有进程都要处理相同数量的I / O,那么最好让内核的调度程序完成它的工作。

关于你的工作实际完成的更多信息将非常有用。

答案 3 :(得分:0)

如果你运行CLI,你可以分叉29-30子进程并在那里运行代码。如果您愿意,可以为每个子节点创建一个带有打开套接字的主进程,也可以为它们创建串行链接。如果它们具有相同的优先级,你通常不得不希望内核能够平衡这些进程。

答案 4 :(得分:0)

鉴于问题的简单性,我建议你寻找最简单的答案。在顶部,我会说你可能会考虑使用一个循环遍历30个参数的实例。