Вопрос о максимальном времени выполнения «Превышено максимальное время выполнения в 60 секунд»Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Вопрос о максимальном времени выполнения «Превышено максимальное время выполнения в 60 секунд»

Сообщение Anonymous »

Мне интересно узнать больше о том, как работает максимальное время выполнения в PHP/Laravel. Я сам пытался поискать в Google, но безуспешно.
Вот в чем проблема.
Я написал фрагмент кода на Laravel, который получает данные из API, извлекает нужные данные из ответа и затем сохраняет это в базу данных. (По сути, импортер продуктов)
Поначалу у меня был весь код в одной функции, и казалось, что все работает нормально. Весь импорт занял около 45 минут (из-за ограничений запросов API). Я ни разу не получил фатальную ошибку «Превышено максимальное время выполнения 60 секунд».
Затем, когда все заработало, я решил начать рефакторинг своего кода и разбить его на небольшие отдельные функции. Логика импортера осталась прежней, ничего не было добавлено, просто вынесено в отдельные функции. Как только я это сделал и снова запустил импортер, вуаля, я получил старую добрую ошибку «Превышено максимальное время выполнения 60 секунд». Это меня очень сбивает с толку, потому что природа импортера осталась прежней, он был просто разделен на более мелкие понятные функции.
Более того, я не мог понять, что вызывает проблему, поэтому решил попытать счастья. здесь. Моя цель не в том, чтобы решить проблему, потому что я могу сделать это, просто выполнив set_time_limit(n); в начале каждого цикла.
Меня больше интересует, что могло вызвать проблему и как именно работает и ведет себя максимальное время выполнения. Буду очень благодарен за любую документацию или пояснение.
Заранее спасибо.
P.S Я бы поместил сюда оба фрагмента кода, но в то время я не использовал контроль версий (глупый я).

Код: Выделить всё

public function importItems(): void
{
$totalRequests = 1;
$totalItems = 0;
$start = 0;
$errorCount = 0;

Log::info('IMPORTER: Started');
$apiConnector = new APIConnector();

for ($i = 1; $i getData('1', $start, 100, $this->Id, 'price', 'asc');

if (!$this->responseValidation($response)) {
if ($errorCount >= 3) {
continue;
}
$errorCount++;
$i--;
continue;
} else {
$errorCount = 0;
}

$response = $response->json();
$start = $response['start'] + $response['pagesize'];

if ($i == 1) {
$totalItems = $response['total_count'];
$totalRequests = $this->calculateTotalRequests($totalItems);
}

$this->saveItemsToDatabase($this->extractItemsData($response['results']));
Log::info('IMPORTER: ' . $start . '/' . $totalItems . ' imported');
//Needs to sleep due to request limit
usleep(12000000 - ((microtime(true) - $requestStartTime) * 1000000) + 1000000);

//usleep($this->calculateSleepTime($this->calculateRequestTime($requestStartTime, microtime(true))));
}
Log::info('IMPORTER: Complete');
}
Я попробовал использовать журнал, чтобы определить, когда и где в коде возникает ошибка. Это происходит во время ожидания между каждым запросом, которое составляет около 12 секунд, и происходит в 5-м цикле, что имеет смысл, поскольку один цикл занимает чуть больше 12 секунд.

Подробнее здесь: https://stackoverflow.com/questions/791 ... s-exceeded
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»