Перейти к основному содержимому

Выполнение кода транзакции словаря процессов (proc_dict_run)

Объявление

результат, сообщение_об_ошибке = proc_dict_run(код_транзакции)

Параметры

  • код_транзакции
    Строка; код транзакции Lua, который требуется выполнить.

Возвращаемые значения

  • результат
    Строка | nil; при успешном выполнении возвращает значение, возвращённое кодом, а при ошибке — nil.
  • сообщение_об_ошибке
    Текст | nil; при успешном выполнении возвращает nil, а при ошибке в выполняемом коде — сообщение об ошибке.

Описание

Эта функция доступна только в версиях после 20250427.
Все словари очередей процессов, имена которых начинаются с "xxtouch." или "1ferver.", сохраняются.
Выполнение кода транзакции словаря процессов блокирует доступ других потоков к функциям proc_ на время выполнения транзакции.
За один запуск нельзя выполнить более 1000000 строк.
При успешном выполнении этот код Lua может вернуть строковое значение.
Это строковое значение будет возвращено вызывающему коду.
Если код возвращает nil, вызывающему коду возвращается пустая строка.
При ошибке возвращаются nil и сообщение об ошибке.

В коде транзакции Lua можно использовать следующие модули и функции

модуль base (без require)
модуль table
модуль string
модуль math
модуль utf8
модуль bit32
модуль json
os.time()
os.clock()
sys.mtime()
utils.gen_uuid()
proc_put(key, value)
proc_get(key)
proc_queue_push_back(key, value)
proc_queue_push_front(key, value)
proc_queue_pop_front(key)
proc_queue_pop_back(key)
proc_queue_pop_value(key, value)
proc_queue_count_value(key, value)
proc_queue_clear(key)
proc_queue_read(key)
proc_queue_size(key)

Пример

function proc_inc(key, int_value)
return proc_dict_run(string.format([[
local key = %q
local value = %d
local ov = proc_get(key)
if ov == '' then
ov = 0
else
ov = tonumber(ov)
end
if not ov then
error('not a number')
end
proc_put(key, tostring(ov + value))
return ov
]], key, int_value))
end

for i = 1, 20 do
nLog(proc_inc('haha', 10))
end