Just ping them. Ping shows how fast they are by response times, so than
just filter them by your desired speed limit. It is usual technicque.
Как блокировать поток на время выполнения SQL запроса
-
Я использую модуль SQL с базой данных mysql. Беру строку из таблицы с минимальной датой. Типа такого:
SELECT * FROM table ORDER BY update_time ASC LIMIT 1и затем пишу текущее время:
UPDATE table SET update_time=[[TIME]] WHERE id=[[ID]]После апдейта я уверен, что строка повторно возьмется в самом конце (данные в моем кейсе должны браться по кругу).
Но часто все равно хватает времени, чтобы несколько потоков взяли одну и ту же строку.SELECT ... FOR UPDATEприводит к ошибке таймаута.
Как блокировать остальные потоки на время выполнения этих двух запросов?
-
@thepappo said in Как блокировать поток на время выполнения SQL запроса:
Как блокировать остальные потоки на время выполнения этих двух запросов?
Ищите на форуме пример реализации блокировки потоков через глобальную переменную для работы с буфером обмена.
-
@thepappo said in Как блокировать поток на время выполнения SQL запроса:
@Fox я видел ваш ответ в соседней ветке и искал полчаса, но что-то так найти и не смог (
https://community.bablosoft.com/topic/4672/hello-need-a-little-help/5
-
Спасибо. А отдельные функции нельзя блокировать? Имею в виду, что через глобальную переменную в данной реализации блокируются все остальные потоки независимо от тех действий, которые они выполняют в данный момент. А нельзя ли сделать, чтобы потоки одновременно не выполняли конкретную функцию, а если находятся вне этой функции, то продолжали работу? Я знаю, что вряд ли, но вдруг )
-
@thepappo said in Как блокировать поток на время выполнения SQL запроса:
Спасибо. А отдельные функции нельзя блокировать? Имею в виду, что через глобальную переменную в данной реализации блокируются все остальные потоки независимо от тех действий, которые они выполняют в данный момент. А нельзя ли сделать, чтобы потоки одновременно не выполняли конкретную функцию, а если находятся вне этой функции, то продолжали работу? Я знаю, что вряд ли, но вдруг )
Можно. Смотрите тестовый скрипт, там максимально просто всё сделано