Pular para o conteúdo principal

Executar o código de transação do dicionário de processos (proc_dict_run)

Declaração

conteudo_de_retorno, mensagem_de_erro = proc_dict_run(codigo_de_transacao)

Parâmetro

  • código de transação
    String: código Lua da transação a ser executado

Valores de retorno

  • conteúdo de retorno
    String | nil: em caso de sucesso, retorna o valor retornado pelo código; em caso de falha, retorna nil
  • mensagem de erro
    Texto | nil: em caso de sucesso, retorna nil; se ocorrer um erro no código executado, retorna a mensagem de erro

Descrição

Esta função está disponível somente a partir da versão 20250427.
Todos os dicionários de filas de processos que começam com "xxtouch." ou "1ferver." são reservados.
Executa o código de transação do dicionário de processos; durante sua execução, outras threads ficam impedidas de acessar e executar funções proc_.
Uma única execução não pode ter mais de 1000000 linhas.
Se a execução for bem-sucedida, o código Lua poderá retornar um valor de string.
Esse valor de string será retornado ao chamador.
Se o código retornar nil, uma string vazia será retornada ao chamador.
Se a execução falhar, serão retornados nil e a mensagem de erro.

Os seguintes módulos e funções podem ser usados no código Lua da transação

Módulo base (sem incluir 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)

Exemplo

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