|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
13.05.2014, 08:14 | #1 |
Форумчанин
Регистрация: 23.03.2013
Сообщений: 218
|
Помогите с синхронизацией работы скрипта
Всем Добрый день!
Дело вот в чём: есть скрипт, в котором реализована работа с файлом. Файл бывает большого размера, поэтом иногда эта работа занимает от секунды, до минуты! Но бывает так, что в одно время в файле сразу два скрипта пытаются выполнить работу, в результате сохраняется результат только одного из скриптов - того, который отработает последним. Как заставить второй скрипт полностью подождать выполнения первого? Пример: Код:
Если файл большой, функция может выполняться минуту и более. Но вызвана она может быть за минуту раза 3, в итоге сохраняется результат обработки последнего вызова. Как исправить проблему? P.S. Просто добавлять строки уникальные тоже нельзя - могут быть повторы если одновременно скрипт выполняется. Нужно именно дождаться полного завершения работы первого вызова функции,потом только выполнять. Последний раз редактировалось lollollollol; 13.05.2014 в 08:16. |
13.05.2014, 10:48 | #2 |
Форумчанин
Регистрация: 28.06.2010
Сообщений: 189
|
|
13.05.2014, 11:28 | #3 |
Пользователь
Регистрация: 02.03.2009
Сообщений: 47
|
Чисто ради любопытства - если получивший блокировку скрипт рухнет, что тогда делают? Конкурирующие скрипты вообще не получат доступ к файлу, пока не вмешается администратор? Не вижу в этой функции способа установить таймаут.
|
13.05.2014, 12:10 | #4 |
Форумчанин
Регистрация: 23.03.2013
Сообщений: 218
|
Как вариант чтобы не рухнул скрипт, установить время выполнения безконечное.
рано или поздно отработает. Ещё думал может в БД записать Имя файла, время, и статус 1-занят А скрипт будет раз в секунду проверять и ждать пока статус будет Свободен. Хотя велосипед получается, думал мож есть какие стандартные метды, может чтото типа глобальных переменных или ещё чего |
13.05.2014, 14:10 | #5 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,150
|
гы.. если можно использовать БД - зачем использовать файлы?
|
13.05.2014, 14:19 | #6 |
Пользователь
Регистрация: 02.03.2009
Сообщений: 47
|
Да нет, меня во-первых интересует вообще вылет скрипта по какой-то ошибке (не Вашего, в принципе), а не просто "слишком долгая работа" - нельзя исключить такую вероятность. А во-вторых, никакой велосипед от этого не спасает. flock как раз реализует этот подход - объявить файл "занятым" навсегда, пока занявший не освободит. А занявший может помер уже давно, а блокировку снять не успел. В других языках/фреймворках где-то встречала возможность задать в блокирующем процессе максимальное время блокировки, после которого ресурс автоматически освобождается. Принудительно снимать блокировку, установленную "скриптом-конкурентом", после некоего времени ожидания - не выход, ибо можно не заметить, что "конкурент" уже поменялся, и файл держит уже другой скрипт. Вообще война получится )))
|
13.05.2014, 14:22 | #7 |
Пользователь
Регистрация: 02.03.2009
Сообщений: 47
|
|
13.05.2014, 14:35 | #8 | ||
Форумчанин
Регистрация: 28.06.2010
Сообщений: 189
|
Цитата:
Цитата:
|
||
13.05.2014, 17:20 | #9 |
Форумчанин
Регистрация: 23.03.2013
Сообщений: 218
|
Сделал синхронизацию через БД.
Ещё вопрос, по этой теме. Допустим в текстовом файле есть 100 000 строк. В переменной $data 1 000 строк. Функцией которая выше я добавляю в файл эти 1 000 строк, исключая из них те, которые уже есть в файле, т.е. дубликаты. По сути получается что я каждую строку из 1 000 сравниваю со всеми 100к в файле, иначе никак. Собственно вопрос: Если вначале эти строки загнать в базу данных, и выполнять проверку на совпадение строк через БД, а потом сохранять в файл, будет быстрее или нет? т.е. мой вариант 1. Загружаю в память файл 2. Проверяю какие строки припишем к файлу 3. Сохраняю всё это Или с БД 1. Загружаю файл в БД 2. Проверяю через БД что нужно записать 3. Дописываю нужные строки к файлу через "a+" Как думаете, какой подход более верный, в плане скорости выполнения и нагрузки? |
13.05.2014, 17:33 | #10 |
Форумчанин
Регистрация: 28.06.2010
Сообщений: 189
|
Зачем вобще файлы?
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Timer. Считаем время работы скрипта | bilibian | Общие вопросы Delphi | 6 | 27.02.2014 22:11 |
результат работы скрипта в ячейке таблицы | MixanMM | PHP | 1 | 31.10.2013 23:27 |
Уменьшение скорости работы скрипта | amdbodia | PHP | 3 | 16.01.2011 20:49 |
Логироване работы TIdTCPServer, проблема с синхронизацией | Altera | Работа с сетью в Delphi | 0 | 05.09.2010 19:42 |
ajax индикатор работы скрипта | ssdm | JavaScript, Ajax | 3 | 08.04.2010 17:04 |