Я работаю над проектом для моей компании. По сути, у нас будет длительный процесс, который будет использовать API на сервере Python для отправки и получения ответов JSON. Он будет принимать данные из этих вызовов API и обновлять таблицы в базе данных mysql. Это будет отзывчивым, но и выполнять запланированные задачи.
Код написан и работает правильно. Вопрос в том, как вы выполняете это разумно? В то время как сознание памяти.
Так же, как этот вопрос Я в настоящее время, очень сожалею и, несмотря на мои многочисленные оговорки, использую while(true)
цикл, чтобы бежать бесконечно со сном 15 секунд после того, как все заканчивается. На указанный вопрос не было много жизнеспособных ответов, и ему почти 3 года. Любые предложения о том, как выполнить это таким образом, чтобы память была дружественной и умной.
Вопрос в том, как вы выполняете это разумно? В то время как сознание памяти.
Не похоже, что с этим подходом многое не так. Если вы хотите убедиться, что у вас нет утечек памяти, убедитесь, что вы выделяете все свои объекты в локальной области видимости, чтобы они не накапливались и вызывали ошибку нехватки памяти.
Я также рекомендовал бы руководителя демона Руководитель автоматически перезапустить ваш процесс PHP, если он падает.
Альтернативой всему этому подходу является удаление вашего while
Зацикливайтесь и автоматически запускайте процесс PHP (через задание CRON или подобное) каждые несколько минут и дайте ему завершиться, как только это будет сделано. Проблема в том, что теперь вам нужно беспокоиться о том, чтобы не допустить параллельной работы двух или более ваших сценариев.
Если вас беспокоит утечка памяти во время работы вашего скрипта, вы можете переместить бесконечный цикл в скрипт-обертку, который просто вызывает ваш скрипт. Что-то вроде:
<?php
while(1) {
exec("worker_script.php");
sleep(15);
}
Возможно, вы захотите избежать сна (). Это время ожидания и может произойти сбой, поэтому комментарий Мартина об использовании Supervisor или другого процесса, который перезапускает сценарии. Этот сценарий позволяет избежать сна и использование памяти невелико.
defined("RESTART_TIMER") || define("RESTART_TIMER", 15);
$restartTime = time() + RESTART_TIMER;
for (;;) {
// Most efficient loop possible.
if (time() >= $restartTime) {
exec("yourFile.php");
$restartTime = time() + RESTART_TIMER;
}
}
Если вы бежите php -a
Вы можете попробовать это, вставив в это:
defined("RESTART_TIMER") || define("RESTART_TIMER", 1);
$restartTime = time() + RESTART_TIMER;
for (;;) {
// Most efficient loop possible.
if (time() >= $restartTime) {
echo memory_get_usage(true) . PHP_EOL;
$restartTime = time() + RESTART_TIMER;
}
}
Нажмите Ctrl-C, чтобы выйти, когда вы устали, но использование памяти постоянно.