首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >管理长时间运行的php脚本的最佳方式?

管理长时间运行的php脚本的最佳方式?
EN

Stack Overflow用户
提问于 2010-02-06 17:17:00
回答 11查看 102.7K关注 0票数 86

我有一个PHP脚本,需要很长时间(5-30分钟)才能完成。以防万一,脚本使用curl从另一台服务器上抓取数据。这就是它花费这么长时间的原因;它必须等待每个页面加载,然后才能处理它并移动到下一个页面。

我希望能够启动脚本,直到它完成,这将在数据库表中设置一个标志。

我需要知道的是如何能够在脚本结束运行之前结束http请求。另外,php脚本是最好的方式吗?

EN

回答 11

Stack Overflow用户

发布于 2010-02-06 17:26:54

更快更脏的方法是在php中使用ignore_user_abort函数。这基本上是说:不要关心用户做了什么,运行这个脚本直到它完成。如果它是一个面向公众的站点,这就有点危险了(因为如果脚本被启动20次,最终可能会有20++版本的脚本同时运行)。

“干净”的方式(至少是IMHO)是,当你想要启动进程并每小时(大约)运行一次cronjob以检查是否设置了该标志时,设置一个标志(例如在db中)。如果已设置,则长时间运行的脚本将启动;如果未设置,则不会发生任何事情。

票数 11
EN

Stack Overflow用户

发布于 2010-02-06 17:49:56

您可以使用execsystem启动后台作业,然后在其中执行工作。

此外,还有更好的方法来抓取你正在使用的网页。您可以使用线程方法(多个线程一次处理一个页面),或者使用eventloop (一个线程同时处理多个页面)。我个人使用Perl的方法是使用AnyEvent::HTTP

ETA:symcbean解释了如何正确地分离后台进程here

票数 8
EN

Stack Overflow用户

发布于 2010-02-06 17:35:52

不,PHP不是最好的解决方案。

我不确定是Ruby还是Perl,但是使用Python你可以把你的页面抓取器重写成多线程的,它的运行速度可能至少快20倍。编写多线程应用程序可能是一个挑战,但我编写的第一个Python应用程序是多线程页面抓取器。您可以通过使用其中一个shell执行函数从PHP页面中简单地调用Python脚本。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2212635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档