powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP межпроцессовое взаимодействие
25 сообщений из 33, страница 1 из 2
PHP межпроцессовое взаимодействие
    #39465493
Фотография re_qas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем задача:
при вызове скрипта чтобы он максимум в !5 флопов! дал метку что его вызвали другим скриптам... вариант с файл.lock - не попадает (((
$_SESSION - ну вообще...
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39465657
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем file.lock не подходит?
Через memcache наверное можно.
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39465669
Фотография re_qas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не успевает (
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39465677
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не успевает что?
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39466079
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5 флопов - это ж по нынешним меркам что-то около нуля по времени. Учитывая, что интерпретатор PHP делает валидацию перед непосредственно исполнением скрипта, сомневаюсь, что такая схема вообще сработает.

А вызывающий скрипт не может сделать уведомление о запуске заранее? Ну, как вариант, конечно.
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39466346
Фотография re_qas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в том то и беда что часть запросов попадает с разницей что-то около нуля... и из-за этого дубли.
HettНе успевает что?не успевает образоваться файл.lock до проверки на него наличия по итогу проскакивают 3-4 дубля...
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39466353
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://php.net/manual/ru/memcache.add.php

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
try {
    if ($memcache->add('key') !== false) {
        // synced block
    } else {
        // lock already acquired
    }
} finally {
    $memcache->remove('key');
}
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39466355
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
re_qasв том то и беда что часть запросов попадает с разницей что-то около нуля... и из-за этого дубли.
HettНе успевает что?не успевает образоваться файл.lock до проверки на него наличия по итогу проскакивают 3-4 дубля...Что-то вы неправильно делаете...
Код: php
1.
$f = @fopen("file.lock","x");

либо файла не было, он создался и вернулся хендл, либо файл был, случилась ошибка создания и вернулся null. Никак не могут два скрипта одновременно создать один и тот же файл.
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39467283
Фотография re_qas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlonere_qasв том то и беда что часть запросов попадает с разницей что-то около нуля... и из-за этого дубли.
пропущено...
не успевает образоваться файл.lock до проверки на него наличия по итогу проскакивают 3-4 дубля...Что-то вы неправильно делаете...
Код: php
1.
$f = @fopen("file.lock","x");

либо файла не было, он создался и вернулся хендл, либо файл был, случилась ошибка создания и вернулся null. Никак не могут два скрипта одновременно создать один и тот же файл.я проверяю
Код: php
1.
2.
3.
4.
5.
6.
if (!file_exists('file.lock')) {
$fp = fopen($file, "x");
if ($fp !== false){
....
}
}


и умудряются лезть дубли
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39467285
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
$file откуда берется?
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39467288
Фотография re_qas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну понятно что $file = 'file.lock' а потом в алге идет fclose($fp) и unlink($file)
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39467296
Фотография re_qas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
re_qasну понятно что $file = 'file.lock' а потом в алге идет fclose($fp) и unlink($file) точнее
Код: php
1.
$file = __DIR__.'/files/lock_'.($bid = (int)(trim($req->post('bid')))).'lock';


и дальше именно по этому $bid идет запрос на то что нужно добавить, если по $bid возвращается false то естественно не то... ну и в логах по три-четыре раза реально int и 1=1
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39467300
Фотография re_qas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хочется заменить на что-то рода
Код: php
1.
2.
3.
4.
5.
if (!isset($_SESSION['lock_'.$bid])||($_SESSION['lock_'.$bid] == false)){
$_SESSION['lock_'.$bid] = true;
...
unset($_SESSION['lock_'.$bid]);
}


но соответственно сессии разные (((
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39467301
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
re_qasя проверяю
Код: php
1.
2.
3.
4.
5.
6.
if (!file_exists('file.lock')) {
$fp = fopen($file, "x");
if ($fp !== false){
....
}
}


и умудряются лезть дублиНе может быть такого дикого бага в РНР, это бы давно заметили...
Полностью код покажите.
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39467302
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, тут у вас проверяется один файл, а создается другой...
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39467305
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
re_qas,

Исходную задачу опишите подробно. Возможно, найдется какой-то другой способ решения.
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39467311
Фотография re_qas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
// начало подгрузки двига cmf и конфигов  (даже не в классе, на данный момент через ифы и файловой структурой, как оказалось на 30% места в оперативке занимает)
$file = __DIR__.'/files/lock_'.($bid = (int)(trim($req->post('bid')))).'.lock';
... //пару обработчиков не связанных с проверками...
if (!file_exists(($file)) {
$fp = fopen($file, "x");
if ($fp !== false){
.... // код переброса с апи в бд с апи берется именно по $bid - $api->get(array('id'=>$bid,'id'))
fclose($fp);
unlink($file);
}else{
...
}
}else{
...
}
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39467312
Фотография re_qas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vklere_qas,

Исходную задачу опишите подробно. Возможно, найдется какой-то другой способ решения.при активной сессии организовать автодобавление через апи с сайта А на сайт Б новых данных. ограничения: активная сессия должна быть к двум сайтам (крон отпадает), ограничение авторизации именно апи... второй нюанс активных сессий - 1500 +/-... период обновления - раз в 5 минут...
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39467314
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
re_qasактивных сессий - 1500 +/-... период обновления - раз в 5 минут...Вот тут не вполне понятно. Обновлялка одна на все сессии или же у каждой сессии своя (вроде, отдельный запуск скрипта с определенными параметрами)?

В каком именно местеre_qasпо итогу проскакивают 3-4 дубля...?
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39467319
Фотография re_qas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleВ каком именно местеre_qasпо итогу проскакивают 3-4 дубля...?
именно при пробросе с апи в бд...

vklere_qasактивных сессий - 1500 +/-... период обновления - раз в 5 минут...Вот тут не вполне понятно. Обновлялка одна на все сессии или же у каждой сессии своя (вроде, отдельный запуск скрипта с определенными параметрами)? одна. параметры для обновления различаются только при инициализации cmf при инициализации авторизации сервер-сервер по апи, дальше только $bid при этом в части обработки есть проверка
Код: php
1.
if ($this->bd->get('table')->where('bid'=>$bid)->get() !==false){...}
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39467322
Фотография re_qas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще сложилось такое впечатление что 3-4 процесса (условно сервер 8 ядерный, пхп х86) срабатывают абсолютно параллельно
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39467323
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
re_qasодна.В смысле, должен произойти единственный запуск скрипта. Параметры запуска один раз вычислили и любая попытка запуска должна использовать именно их. Правильно понимаю?
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39467327
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
re_qasвообще сложилось такое впечатление что 3-4 процесса (условно сервер 8 ядерный, пхп х86) срабатывают абсолютно параллельноСам по себе PHP однопоточный. Пока не запустишь отдельный процесс (форком или внешним скриптом запуска), не будет ничего параллельного. Конечно, есть вариант, когда при нескольких конкурирующих попытках запуска требуется обеспечить гарантировано один экземпляр запущенного скрипта. Тогда обычно использую такую пару строк:
Код: php
1.
2.
$fp_lock = fopen(__FILE__, 'r+');
if(!flock($fp_lock, LOCK_EX | LOCK_NB)) exit;

У меня с этих строк по крону стартуют относительно долгоиграющие скрипты когда заранее невозможно определить предполагаемую продолжительность работы скрипта.
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39467329
Фотография re_qas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vklere_qasодна.В смысле, должен произойти единственный запуск скрипта. Параметры запуска один раз вычислили и любая попытка запуска должна использовать именно их. Правильно понимаю?именно этой части идет наличие по uri $bid через пост и проверка дольше только то этому одному параметру... само добавление ветвлится но на другие $bid перепрыгнуть не может - $bid - корень... новый появляется 4-10 раз в 5 минут... раз в 5 минут у всех 1500+ срабатывает запрос на обновление... этот запрос возвращает список $bid, по которому пинается скрипт на добавление по принципу кто первый от того и добавим - остальных нах...
...
Рейтинг: 0 / 0
PHP межпроцессовое взаимодействие
    #39467330
Фотография re_qas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle
Код: php
1.
if(!flock($fp_lock, LOCK_EX | LOCK_NB)) exit;

по логике должен сработать аналогично fopen(..,'x') если есть вернет false....
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP межпроцессовое взаимодействие
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]