Возможно ли заморозить объект на время?

vovanium

Новичок
Хм. Это какие-такие мелкие манипуляции нужно выполнять, что бы не вписаться в 30 сек?
Ну, насколько я понял речь идет о бэкапе сайта, файлов и содержимого БД. Так что там легко процесс может вылезти и за 300 сек.

Тут в любом случае придется самому это писать, т.к. одной сериализации/десериализации не достаточно.
 

fast2111

Новичок
А если эти сложные манипуляции доверить отдельному процессу, который
будет работать без лимитов времени, некий демон, который будет каждого
"клиента" обслуживать отдельно, а вот у клиента может быть лимит времени, но если есть ajax то можно повторять попытки клиента пока демон не даст ответ...
 

vovanium

Новичок
который
будет работать без лимитов времени
Задача рассчитана на массовое применение, а далеко не на каждом хостинге разрешат создать процесс без лимитов времени ;)
 

KukPHP

Новичок
а может проверить базу адресов...обращение к одному адресу в инете занимает время...А если таких адресов 1к?
 

Sokil.Dmytro

Новичок
а в чем проблема собсна? сохрани текущее состояние того что экспортируешь. заведи файл. в него сохраняй промежуточное состояние. в коде цикл. ставится профайлер. если время работы вываливается за установленое сохранить состояние. инициировать перезагрузку. считать состояние и продолжить работу.
напимер надо обойти все файлы на сервере.в файл пишем необработанные папки. сначала это будет допустим /. Берутся из этой папки все вложенные и пишутся в массив. файлы выводятся кудато. потом массив папок сериализируется. перегружаемся. десериализируется массив - выбирается первая папка из него и удаляется из массива. опять открываем ее и вложенные папки добавляем в конец массива. и так до полного завершения.
при экспорте базы можно делать SELECT LIMIT m OFFSET n и сейвить число n.
 

vovanium

Новичок
Sokil.Dmytro
а в чем проблема собсна?
Так ни в чем не проблема, человек спрашивал есть ли стандартные средства для сохранения состояния класса и возможности продолжения его работы с места остановки.
 

fixxxer

К.О.
Партнер клуба
ну длительная операция это скорее всего множество мелких однообразных операций.
если каждая операция независима - вообще не вижу проблем, за один раз делать N операций и продолжать при следующем запуске с N+1 (тупо передавая параметр begin); если же нужно запоминать состояние - ну и хранить его...где угодно.

встроенных языковых средств сохранения контекста в php нет.
 

das6745

Новичок
а сериализация разве не сохраняет состояние экземпляра? или я что-то путаю?
 

WP

^_^
На самом-то деле задачка несложная, поиграться с register_shutdown_function или ob_start, писать в файл текущее состояние скрипта, а потом восстанавливать.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
если бы задача была сложная - она пришла бы в голову опытному разработчику,
но опытный разработчик такую задачу никогда не поставит, найдя естественное решение реальной бизнес-задачи
поэтому, после сожжения нескольких ватт электроэнергии, сотен килобайт трафика и рублей зарплаты, задача останется нереализованной,
а поиски путей подтверждения личной абсолютной правоты топикстартера сместятся в другую область
 

antson

Новичок
Партнер клуба
moscower

по моему мнению задачи импорта данных как из текстового файла (выгрузки 1с) так и разбора бекапа базы можно свести к одному целочисленному параметру который можно передавать
этому же скрипту для следующей итерации.

при разборе прайса это может быть просто номер итнерации из которого расчитывается диапазон строк к обработке (такой, чтобы успевал обрабатываться за 20-25 секунд )

при парсинге бекапа можно контролировать время от начала запуска скрипта внутри цикла разбора и если после очередного обращения к базе оно превысило 20 секунд, то формировать
инструкцию хтмл для вызова следующей итерации и в качестве параметра передавать смещение в разбираемом бекапе.
 

moscower

Новичок
Всем спасибо, сделал при помощи параметра is_terminated, и запуска после каждой предположительно длительной операции функции check_time.

Все необходимые данные чтобы вернуться на то же самое место (названия ф-ий, счетчики циклов, LIMIT-ы MySQL) сохраняю в переменную объекта, а потом читая их возвращаюсь к тому же месту. Кода много лишнего, но ничего поделать нельзя :(
 
Сверху