- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
public function syncStock() {
$locked = file_exists(__DIR__ . '/lock/gk_sync_stock');
if ($locked) {
$this->logger->log("Attempt to sync locked stock");
return;
}
file_put_contents(__DIR__ . '/lock/gk_sync_stock', current_time('mysql'));
$changed = $this->_syncStock();
unlink(__DIR__ . '/lock/gk_sync_stock');
$this->logger->log("Sync stock complete, $changed changed");
}
Почему-то сразу вспомнились два камерунских члена, пытавшихся одновременно проникнуть в анус SemaReal'а (этакий "Twix").
>>php
тили-тили
трали-вали
а мы flock() не проходили
а нам flock() не задавали
чирик
пиздых
хуяк
куку http://php.net/manual/ru/function.flock.php
А так?
Да, два процесса не смогу зайти за flock, и пока ты write никто не сможет его truncate.
Но вот зачем тут целый класс, какая логика стоит за возвращаемым значением и что делает _syncStock я не знаю
Дедлока не будет так как никто никого не ждет, а вот гонка тоже может быть
В общем-то uwsgi и треды (обычные и зелёные) должен уметь, но я не стал с ними заморачиваться (в прошлый раз они только на втором питоне работали).
Ну вот например гуникорн умеет обычный prefork (когда он родит несколько процессов и каждый обслуживает клиента) и стопицот вариантов async.
Почитай, тут все написано:
http://docs.gunicorn.org/en/stable/design.html
Конкретно этот код шарит не объект в адресном пространстве, а в внешний файл, так что даже два питона могут его одновременно обрабаывать.
А если питоны на разных машинах, то достаточно положить этот файл на шару.
Очень ценное замечание. Программисту только не пофиг.
>этот код шарит в внешний файл
Это как?
Эта фраза звучит так, словно бы ЯП Python требует всегда наличие одного процесса и одного потока. Ну вот я тебя поправил: это не так.
>Это как?
Ну ты читал код топикстартера? Он пытается синхронизироваться по файлу. То-есть даже два отдельно запущенных питона будут этой синхронизации подвержены.