Saltar al contenido principal

Ejecutar código transaccional del diccionario de procesos (proc_dict_run)

Declaración

contenido_devuelto, mensaje_error = proc_dict_run(codigo_transaccion)

Parámetros

  • codigo_transaccion
    Tipo texto; código Lua transaccional que se ejecutará

Valores devueltos

  • contenido_devuelto
    Tipo texto | nil; si la ejecución tiene éxito, devuelve el valor devuelto por el código; si falla, devuelve nil
  • mensaje_error
    Tipo texto | nil; si la ejecución tiene éxito, devuelve nil; si se produce un error en el código, devuelve el mensaje de error

Descripción

Disponible a partir de las versiones posteriores a 20250427
Se conservan todos los diccionarios de colas de procesos cuyo nombre comienza por "xxtouch." o "1ferver."
Ejecuta código transaccional del diccionario de procesos. Mientras se ejecuta el código transaccional, se impide que otros hilos ejecuten funciones proc_
Una ejecución individual no puede superar 1000000 líneas
Si la ejecución tiene éxito, el código Lua puede devolver un valor de texto
Ese valor de texto se devuelve a quien realiza la llamada
Si el código devuelve nil, se devuelve una cadena vacía a quien realiza la llamada
Si la ejecución falla, devuelve nil y el mensaje de error

Los módulos y funciones siguientes están disponibles al ejecutar código Lua transaccional

módulo base (no incluye require)
módulo table
módulo string
módulo math
módulo utf8
módulo bit32
módulo 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)

Ejemplo

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