2009-03-02 60 views
2

我有一个php脚本,用于检查许多网站上的更新。 有时(随着站点数量的增加,频率越来越高),我在其中一个站点的更新上遇到了执行超时,整个脚本就不堪重负。在Win上的PHP中fork /线程的最佳方式是什么?

我可以想出的最好的想法是分叉每个更新,所以如果它死了,整体更新只是继续。 从我收集的信息看来,PHP线程似乎不是依赖的东西,尤其是在Windows平台上(我不得不努力工作)。

我曾考虑过使用curl作为分叉机制,但是对于服务器(在时间和处理能力方面)不会更昂贵吗?

我很乐意听到的一些想法和关于PHP分叉/线程体验...

感谢, 奥马尔。

回答

1

那么,最后我去了卷曲,它工作得很好。

我需要一个跨平台的解决方案,因为我在Mac上开发,而在这种情况下,生产服务器是Windows。这意味着pcntl是不可能的。

我担心发送数以千计的curl请求到我自己的服务器可能会在当时占用网站上的用户,但我错了。

但是,我不得不将set_time_limit(0)添加到启动所有curl调用的脚本,否则它只是超时。

1

您可以将ini指令max_execution_time设置为0.这应该删除最大执行时间,并允许脚本在不引发此错误的情况下运行。这个值必须在你的php.ini文件中设置,但是 - 使用ini_set不起作用。

+0

您可以使用set_time_limit将其设置为0。如果你不使用安全模式,max_execution_time的ini_set应该在脚本中工作。 – OIS 2009-03-02 09:37:12

+0

是的,但是如果有什么东西实际上卡住了呢? 脚本会永久停止吗? – Omer 2009-03-02 11:19:56

2

如果您要使用cURL查看允许您简化cURL并与一组网站进行交互的multi *系列方法。这就是说,你也可以设置你的最大执行时间(通过ini_set)到一些任意高的数字和/或保持你自己的看门狗计数器,这样你就不会让它变得太高。

但是,是的,最终会遇到问题和PHP中缺乏完整的线程支持。所以最好的选择是看看其他的选择,例如其他提供本地线程支持的语言/平台。

相关问题