- 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");
}
inho 16.03.2018 22:35 # −1
g0_1494076596974 16.03.2018 22:40 # −1
Почему-то сразу вспомнились два камерунских члена, пытавшихся одновременно проникнуть в анус SemaReal'а (этакий "Twix").
SemaReal 18.03.2018 14:43 # 0
bormand 16.03.2018 22:38 # 0
inho 16.03.2018 22:57 # −1
SemaReal 17.03.2018 03:57 # 0
fuckercoder 27.03.2018 05:33 # 0
SemaReal 16.03.2018 22:52 # +2
>>php
тили-тили
трали-вали
а мы flock() не проходили
а нам flock() не задавали
чирик
пиздых
хуяк
куку http://php.net/manual/ru/function.flock.php
inho 16.03.2018 22:57 # −1
inho 16.03.2018 23:59 # 0
А так?
SemaReal 17.03.2018 02:47 # 0
Да, два процесса не смогу зайти за flock, и пока ты write никто не сможет его truncate.
Но вот зачем тут целый класс, какая логика стоит за возвращаемым значением и что делает _syncStock я не знаю
bormand 17.03.2018 07:16 # +1
inho 17.03.2018 09:39 # +3
inho 17.03.2018 09:36 # 0
gost 19.03.2018 22:25 # +1
syoma 16.03.2018 22:59 # −1
kir_rik 16.03.2018 23:24 # −2
SemaReal 17.03.2018 02:49 # 0
Дедлока не будет так как никто никого не ждет, а вот гонка тоже может быть
syoma 18.03.2018 19:33 # 0
bormand 18.03.2018 19:48 # 0
syoma 19.03.2018 19:40 # 0
bormand 19.03.2018 19:42 # 0
В общем-то uwsgi и треды (обычные и зелёные) должен уметь, но я не стал с ними заморачиваться (в прошлый раз они только на втором питоне работали).
SemaReal 19.03.2018 19:44 # 0
Ну вот например гуникорн умеет обычный prefork (когда он родит несколько процессов и каждый обслуживает клиента) и стопицот вариантов async.
Почитай, тут все написано:
http://docs.gunicorn.org/en/stable/design.html
Конкретно этот код шарит не объект в адресном пространстве, а в внешний файл, так что даже два питона могут его одновременно обрабаывать.
bormand 19.03.2018 19:49 # +1
А если питоны на разных машинах, то достаточно положить этот файл на шару.
SemaReal 19.03.2018 19:52 # 0
DypHuu_niBEHb 23.01.2023 17:41 # 0
syoma 19.03.2018 20:24 # 0
Очень ценное замечание. Программисту только не пофиг.
>этот код шарит в внешний файл
Это как?
SemaReal 19.03.2018 20:27 # 0
Эта фраза звучит так, словно бы ЯП Python требует всегда наличие одного процесса и одного потока. Ну вот я тебя поправил: это не так.
syoma 19.03.2018 20:29 # 0
SemaReal 19.03.2018 20:32 # 0
>Это как?
Ну ты читал код топикстартера? Он пытается синхронизироваться по файлу. То-есть даже два отдельно запущенных питона будут этой синхронизации подвержены.
subaru 19.03.2018 21:12 # 0
Simmchen 19.03.2018 21:13 # 0
SemaReal 19.03.2018 21:14 # +1
Simmchen 19.03.2018 21:15 # 0
cepreu_monoJlb 23.01.2023 17:55 # 0