@tet-vivi вот так:
/*Dat:eyJzIjoidGV4dCIsInYiOjEsImYiOltdLCJ1dyI6IjAiLCJ1dCI6IjAiLCJ1dG8iOiIwIiwidW0iOiIwIiwiZCI6W3siaWQiOiJTYXZlVGV4dCIsInR5cGUiOiJ2YXIiLCJkYXRhIjoiU0FWRURfVEVYVCJ9XSwicCI6eyJpc19pbWFnZSI6ZmFsc2UsImNzcyI6IiA+Q1NTPiAjdGltZXItMTEwOTg2NSIsInZlcnNpb24iOiIxLjAiLCJjc3MxIjoiID5DU1M+ICN0aW1lci0xMTA5ODY1IiwiY3NzMiI6IiA+Q1NTPiBzcGFuIiwiY3NzMyI6IiIsImN1cnJlbnQiOiJjc3MiLCJtYXRjaCI6Ij5NQVRDSD48c3BhbiBpZD1cInRpbWVyLTExMDk4NjVcIj4wZCAxaCAxNm0gMjZzIDwiLCJ4cGF0aCI6IiA+WFBBVEg+IGlkKFwidGltZXItMTEwOTg2NVwiKSIsImF0IjoiMzU0LCAyODUiLCJ3ZSI6dHJ1ZSwiZmEiOnRydWV9fQ==*/ /*Browser*/ _SELECTOR = " \u003eCSS\u003e #timer-1109865"; wait_element(_SELECTOR)! get_element_selector(_SELECTOR, false).text()! VAR_SAVED_TEXT = _result() section_end()! section_start("", 238272681)! /*Dat:eyJzIjoiaWYiLCJ2IjoxLCJyb2xlIjoibWFzdGVyIiwic2xhdmUiOjgwMTI3MDg5MywibWFzdGVyIjoyMzgyNzI2ODEsImlmX3ZhciI6Il9jeWNsZV9wYXJhbXMoKS5pZl9lbHNlIiwiZiI6W10sInV3IjoiMCIsInV0IjoiMCIsInV0byI6IjAiLCJ1bSI6IjAiLCJkIjpbeyJpZCI6IklmRXhwcmVzc2lvbiIsInR5cGUiOiJjb25zdHIiLCJkYXRhIjoiW1tTQVZFRF9URVhUXV0gIT0gMCIsImNsYXNzIjoiZXhwcmVzc2lvbiJ9LHsiaWQiOiJJZkVsc2UiLCJ0eXBlIjoiY2hlY2siLCJkYXRhIjp0cnVlfV19*/ _cycle_params().if_else = VAR_SAVED_TEXT != 0; _if(_cycle_params().if_else,function(){ section_insert() })! section_end()! section_start("\u007b\u0022n\u0022:\u0022Else\u0022\u007d", 801270893)! /*Dat:eyJzIjoiaWYiLCJ2IjoxLCJyb2xlIjoic2xhdmUiLCJzbGF2ZSI6ODAxMjcwODkzLCJtYXN0ZXIiOjIzODI3MjY4MSwiaWZfdmFyIjoiX2N5Y2xlX3BhcmFtcygpLmlmX2Vsc2UiLCJmIjpbXSwidXciOiIwIiwidXQiOiIwIiwidXRvIjoiMCIsInVtIjoiMCIsImQiOlt7ImlkIjoiSWZFeHByZXNzaW9uIiwidHlwZSI6ImNvbnN0ciIsImRhdGEiOiJbW1NBVkVEX1RFWFRdXSA9IDAiLCJjbGFzcyI6ImV4cHJlc3Npb24ifSx7ImlkIjoiSWZFbHNlIiwidHlwZSI6ImNoZWNrIiwiZGF0YSI6dHJ1ZX1dfQ==*/ _if(!_cycle_params().if_else,function(){ section_insert() })! delete _cycle_params().if_else; section_end()! ```Как блокировать поток на время выполнения 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 запроса:
Спасибо. А отдельные функции нельзя блокировать? Имею в виду, что через глобальную переменную в данной реализации блокируются все остальные потоки независимо от тех действий, которые они выполняют в данный момент. А нельзя ли сделать, чтобы потоки одновременно не выполняли конкретную функцию, а если находятся вне этой функции, то продолжали работу? Я знаю, что вряд ли, но вдруг )
Можно. Смотрите тестовый скрипт, там максимально просто всё сделано