Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在一个cron文件中处理多个rss/xml提要而不使服务器过载_Php_Cron - Fatal编程技术网

Php 在一个cron文件中处理多个rss/xml提要而不使服务器过载

Php 在一个cron文件中处理多个rss/xml提要而不使服务器过载,php,cron,Php,Cron,我有一个cron,目前每20分钟运行一次,但最终将每分钟运行一次。这个cron可能会处理数百个远程获取XML文件的函数,并对其进行处理和执行其任务。问题是,由于远程站点的速度,此脚本有时可能需要一段时间才能运行 有没有一种安全的方法可以在不[a]脚本超时的情况下执行此操作[b]使服务器超载[c]重叠,并且在该分钟内没有完成其任务,然后再次运行该错误会消失吗 不幸的是,缓存不是一个选项,因为数据几乎是实时变化的,而且来自各种来源。有一个堆栈,可以保存所有作业,有几个线程,它们的任务是: 从堆栈中弹

我有一个cron,目前每20分钟运行一次,但最终将每分钟运行一次。这个cron可能会处理数百个远程获取XML文件的函数,并对其进行处理和执行其任务。问题是,由于远程站点的速度,此脚本有时可能需要一段时间才能运行

有没有一种安全的方法可以在不[a]脚本超时的情况下执行此操作[b]使服务器超载[c]重叠,并且在该分钟内没有完成其任务,然后再次运行该错误会消失吗


不幸的是,缓存不是一个选项,因为数据几乎是实时变化的,而且来自各种来源。

有一个堆栈,可以保存所有作业,有几个线程,它们的任务是:

从堆栈中弹出一个作业 检查是否需要刷新xml文件,检查ETag、过期标头等。 抓取XML这可能需要一些时间,因此如果需要,可以将负载分散到线程上。如果需要太长时间,这应该会超时,并提高它对某人的影响,因为您可能有一个站点关闭了,不可靠的rss生成器或其他什么。 然后处理它 这样,您每次都可以获取大量数据

这可能是因为你根本不需要抓取文件,如果你可以存储文件的最后一个etag等,这会有所帮助

提示一点,不要期望它们中的任何一个是有效的格式。建议您看看MarkPilgrims RSS RegExp阅读器,它在阅读大多数RSS方面做得非常好


另外:我想说的是,每分钟访问同一个站点对服务器来说并不是一件好事,它会为您的服务器带来很多工作,您真的需要经常访问吗?

有一个堆栈,您可以保存所有作业,有几个线程,它们的任务是:

从堆栈中弹出一个作业 检查是否需要刷新xml文件,检查ETag、过期标头等。 抓取XML这可能需要一些时间,因此如果需要,可以将负载分散到线程上。如果需要太长时间,这应该会超时,并提高它对某人的影响,因为您可能有一个站点关闭了,不可靠的rss生成器或其他什么。 然后处理它 这样,您每次都可以获取大量数据

这可能是因为你根本不需要抓取文件,如果你可以存储文件的最后一个etag等,这会有所帮助

提示一点,不要期望它们中的任何一个是有效的格式。建议您看看MarkPilgrims RSS RegExp阅读器,它在阅读大多数RSS方面做得非常好


另外:我想说的是,每分钟访问同一个站点对服务器来说并不是很好,而且会为您的服务器带来很多工作,您真的需要经常访问吗?

我认为稍微改变一下设计会对这一过程大有好处。考虑到远程服务器可能超时,或者连接可能很慢,如果一个慢的作业在另一个作业启动时仍在写入文件,那么肯定会遇到并发问题

我会把它分成两个独立的脚本。一个脚本只用于获取最新的XML数据,另一个脚本用于处理它。如果需要的话,fetch脚本可能会花很多时间,而process脚本会不断地寻找最新的可用文件来处理它


通过这种方式,它们可以独立运行,并且处理脚本始终可以处理最新的数据,而不考虑脚本执行所需的时间。

我认为稍微改变一下设计会对该过程带来很大好处。考虑到远程服务器可能超时,或者连接可能很慢,如果一个慢的作业在另一个作业启动时仍在写入文件,那么肯定会遇到并发问题

我会把它分成两个独立的脚本。一个脚本只用于获取最新的XML数据,另一个脚本用于处理它。如果需要的话,fetch脚本可能会花很多时间,而process脚本会不断地寻找最新的可用文件来处理它


通过这种方式,它们可以独立运行,并且处理脚本始终可以处理最新的数据,而不考虑脚本执行所需的时间。

您应该确保读取正在捕获的提要的标签,以确保在提要更改之前不会不必要地捕获提要。保存更新周期。因此,如果一个提要有60个,那么它应该每60分钟更新一次。

您应该确保阅读您正在获取的提要的标签,以确保在提要更改之前不会不必要地获取它们。保存更新周期。因此,如果一个提要有60个,那么它应该每60分钟更新一次。

好的计划,这样在成功检索数据之前不会发生任何事情。谢谢你的提示!好的计划,这样在成功检索数据之前不会发生任何事情。谢谢你的提示!