多次调用函数而无需等待其完成

3

我有一个cron job,每分钟调用一个脚本来遍历一些项目,并将它们作为帖子提交到Facebook Graph API。问题在于,每个调用需要几秒钟的时间。如果在给定的一分钟内要发送超过10篇文章到API,则脚本运行时间超过一分钟,然后在下一分钟脚本开始运行时会出现问题。

一般流程如下: 1. 每个Facebook账户每小时发布一次 2. 这些账户中的每个都有一个“发布分钟”,即它们在整点的哪一分钟发布 3. Cron job每分钟运行一次,查看应该在任何给定分钟内发布哪些账户,并进行发布

我的问题是:是否可能在调用以下 $facebook->api(...) 方法后立即继续脚本,而不是等待其完成后再继续?这样可以确保在给定的一分钟内向所有账户发布文章,而不会有太多账户需要发布导致脚本超过60秒。

$profilesThatNeedToBePostedTo = getProfilesToPostTo(date(i));
foreach($profilesThatNeedToBePostedTo as $profile)
{
    $facebook->api($endPoint, 'POST', $postData); // $postData and $endPoint omitted for brevity
}
2个回答

0

你所询问的是在PHP中是否可以进行异步调用。这里有一些解决方案:Asynchronous PHP calls

只是要指出,它们并不是最可靠的选项。

不是将每次发布的帖子数量限制为9个,而是减少超过60秒的次数。但如果Facebook Graph很慢怎么办?你该怎么做?

或者运行你的代码60秒,一旦达到60秒的时间就关闭函数。然后下一次再运行它。


我需要它们在规定的时间内全部发布。数据库存储了一个posting_minute字段(0到59),每分钟检索当前小时的配置文件,然后进行发布。例如,如果现在是上午10:15,并且脚本运行并发布了9个posting_minute为15的项目,还有5个要发布,这将无法工作,因为下一分钟将仅拉取已在上午10:16发布的帖子。 - Mark Gladstone
我会将所有需要发布的帖子放入队列中。然后另一个定时任务将负责将数据发布到Facebook Graph。这是在此类解决方案中安全的方式。因此,如果出现问题或Facebook没有响应,您可以根据队列中的内容知道需要发布什么。 - Roninio

0

我不确定我是否完全清楚地理解了你的问题。你的意思是想每分钟运行cronjob。然而,调用Facebook API需要超过1分钟的时间。你的意思是foreach循环可能会延迟你的cronjob吗? 如果是这样,我想知道你是否编写了正确的cronjob脚本,最好展示一下你的cronjob脚本。因为我认为php脚本不应该影响你的sh脚本(cronjob)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接