我正在开发一个WordPress插件,希望运行一个后台任务来调用API并更新数据库表。现在,API只能一次性给出5个DB条目的结果,对于我表中的500个条目,我必须进行100个API调用。API允许TPS配额为1,并且每40分钟,它的旧响应就会过期,这意味着如果有任何条目超过40分钟,我需要通过进行新的API调用来更新我的表。而且,所有这些DB条目都必须以最新数据显示给页面查看器。
我提出的解决方案是安排一个cron任务,该任务每分钟运行一次,API一个接一个地调用25秒,然后终止,这样就不会超过PHP的最大执行时间限制。当客户到来时,他不必等待API调用或被API限制
但问题是我不能依赖wp-cron,因为它只有在页面命中时才会被调用(不像实际的cron,因为我是插件开发人员,所以我不能在客户的WordPress托管环境中安排系统cron)。此外,如果该用户在3小时内仅收到一个页面点击,则3小时内的第一个用户必须等待这些API调用完成(完全不理想,或者更好地说是可行的),否则他将无法显示数据。
有没有其他方法可以解决这个问题,即通过某种后台进程更新DB条目,既不会减慢客户端的速度,也不会依赖于页面加载。所以,即使一天有4个客户来,他们都会得到最新的数据(在过去40分钟内更新的数据),因为它已经在后台更新了?
SO网友:James John
禁止WP Cron在用户流量上运行。然后通过cron或其他地方的定时作业运行cron。您可以通过将此添加到wp-config.php
define(\'DISABLE_WP_CRON\', true);
然后设置cron作业以点击此URL-
https://domain.com/wp-cron.php?doing_wp_cron
在您想要的时间间隔。快速
wget
代码如下:
wget -q -O - https://domain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
我建议每一分钟,因为WordPress安装中的所有其他cron作业都将依赖于它