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 ;nilen cas d’échec - Message d’erreur
Type texte | nil,nilen 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 renvoienil, une chaîne vide est renvoyée à l’appelant. En cas d’échec, renvoienil, 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