Aller au contenu principal

Exécuter le code transactionnel du dictionnaire de processus (proc_dict_run)

Déclaration

contenu renvoyé, message d’erreur = proc_dict_run(code transactionnel)

Paramètres

  • Code transactionnel
    Type chaîne, code Lua transactionnel à exécuter

Valeur de retour

  • Contenu renvoyé
    Type chaîne | nil, valeur renvoyée par le code en cas de succès ; nil en cas d’échec
  • Message d’erreur
    Type texte | nil, nil en cas de succès ; message d’erreur lorsque l’exécution échoue

Description

Cette fonction est disponible dans les versions postérieures à 20250427. Tous les dictionnaires de files de processus commençant par "xxtouch." ou "1ferver." sont réservés. Exécute le code transactionnel du dictionnaire de processus ; pendant son exécution, l’accès des autres threads aux fonctions proc_ est bloqué. Une exécution unique ne peut pas dépasser 1000000 lignes. En cas de succès, le code Lua peut renvoyer une valeur chaîne. Cette valeur chaîne est renvoyée à l’appelant. Si le code renvoie nil, une chaîne vide est renvoyée à l’appelant. En cas d’échec, renvoie nil, message d’erreur.

Les modules et fonctions suivants sont disponibles pour exécuter le code Lua transactionnel

Module base (sans require)
Module table
Module string
Module math
Module utf8
Module bit32
Module 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)

Exemple

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