Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在另一个协同程序中运行Tarantool Lua函数_Lua_Tarantool - Fatal编程技术网

在另一个协同程序中运行Tarantool Lua函数

在另一个协同程序中运行Tarantool Lua函数,lua,tarantool,Lua,Tarantool,我使用NoSQL数据库Tarantool,并尝试使用Lua存储过程在数据库端做一些复杂的工作。我认为这是个好主意,因为我可以做更少的数据库调用,并且网络数据传输的开销也更小。 我有一些桌子: 用户计数器:id、计数器a、计数器b、分数 例如,我有一些函数来计算字段分数: function recalc_score(id) local stream = box.space.user_counters:select { id } local rating = 0 -- some_r

我使用NoSQL数据库Tarantool,并尝试使用Lua存储过程在数据库端做一些复杂的工作。我认为这是个好主意,因为我可以做更少的数据库调用,并且网络数据传输的开销也更小。
我有一些桌子:
用户计数器:id、计数器a、计数器b、分数

例如,我有一些函数来计算字段分数:

function recalc_score(id)
   local stream = box.space.user_counters:select { id }
   local rating = 0
   -- some_rating_calculation using counter_a and counter_b here
   box.space.user_counters:update(id, { { '=', 4, rating } })
end
我还有另外一个函数用于字段计数器a和计数器b的更新:

function update_user_counters(id, counter_a_diff, counter_b_diff)
    local rating_default = 0
    local user_counters_tuple = box.space.user_counters:upsert(
        { id, counter_a_diff, counter_b_diff, rating_default },
        { { '+', 2, counter_a_diff }, { '+', 3, counter_b_diff } }
    )
    -- start another coroutine recalc_score(id) and forget about it
    return user_counters_tuple
 end
如何调用recalc\u score(id)函数并返回用户计数器\u元组而不等待上一个函数执行何时完成?

只需使用fiber.create(fun,…):

local fiber = require('fiber')

-- start another coroutine recalc_score(id) and forget about it
fiber.create(recalc_score, id)