2014-05-05 3 views
3

У меня есть задание cron, которое вызывает скрипт, который выполняет итерации через некоторые элементы и отправляет их в виде сообщений в Facebook Graph API каждую минуту. Проблема в том, что каждый вызов занимает несколько секунд. Если в течение одной минуты в API будет отправлено более 10 сообщений, сценарий продлится более минуты, а затем начнет вызывать проблемы, когда скрипт снова начнет работать в следующую минуту.Вызов функции несколько раз, не дожидаясь ее завершения

Общий процесс таков: 1. Каждый сообщений facebook профиля каждый час 2. Каждый из этих профилей имеет «разноски минуты», которая является минутой часа, что они размещены на 3. А Задача cron запускается каждую минуту, чтобы узнать, какие профили должны быть размещены, каждую минуту, а затем сообщения к ним.

Мой вопрос: возможно ли продолжить выполнение скрипта сразу после вызова $ facebook-> api (...) метод ниже, а не ждать его завершения до продолжения? Чтобы он мог отправлять сообщения всем профилям в течение данной минуты, а не потенциально подвергать риску слишком много профилей для отправки и сценарию, превышающему 60 секунд.

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

ответ

0

Что вы спрашиваете, если в PHP вы можете выполнять асинхронные вызовы. Здесь есть несколько решений: Asynchronous PHP calls

Просто, чтобы указать, что нет самых надежных опций.

Не ограничивайте количество сообщений до 9 каждый раз, уменьшая время, превышающее 60 секунд. Но что происходит, если график Facebook медленный? чем ты занимаешься?

Или запустите код в течение 60 секунд, и по истечении 60 секунд закройте эту функцию. И пусть он снова запустится в следующий раз.

+0

Мне нужно, чтобы все они были отправлены в ту минуту, что им нужно. База данных хранит поле posting_minute (от 0 до 59) и каждую минуту, а профили для текущей минуты часа извлекаются, а затем публикуются. Так, например, если это 10:15 утра, а сценарий работает и отправляет 9 элементов, у которых есть posting_minute из 15, и еще есть еще 5 сообщений, это не сработает, так как в следующую минуту будут тянуть только сообщения, которые были опубликовано в 10:16. –

+0

Я бы взял все сообщения, необходимые для публикации, и поместил их в очередь. И чем другой cron будет нести ответственность за публикацию данных на Facebook Graph. Это безопасный способ решения таких проблем. Так что если что-то пойдет не так или, facebook не отвечает. Вы знаете, что вам нужно для публикации, исходя из того, что находится в очереди. – Roninio

0

Я не уверен, насколько я понимаю ваш вопрос на сто процентов ясно. Вы имели в виду, что вы хотите запускать cronjob каждую минуту. Однако для вызова API facebook требуется более 1 минуты. Вы имеете в виду, что цикл foreach может задерживать ваш cronjob? Если это так, мне интересно, если вы сделали правильный скрипт cronjob, лучше показать свой скрипт cronjob. Потому что я думаю, что php-скрипт не должен влиять на ваш скрипт sh (cronjob)

Смежные вопросы