Lua可以同时执行多个任务。

我一直在寻找一种同时执行多个任务(至少2个)的解决方案。我在lua中找到了类似协程的东西。请问是否可以详细说明如何处理2个或多个任务?基本上我想做的是运行某些事件并使用lua脚本测量该进程的内存消耗。任何快速解决方案或想法都将不胜感激。 谢谢

点赞
用户1183484
用户1183484

看一下 io.popen(prog [, mode])

io.popen 的文档 中,“在另一个进程中启动 prog”。

这是我如何实现这个功能的:

-- 启动您要测量的程序。我假设它不会立即退出。
-- 这里的 Lua 不会阻塞:它不等待程序退出。
io.popen('要测量的脚本')

-- 启动第二个进程来测量第一个进程。
local measure = io.popen('测量过程', 'r')

-- 读取所有数据将阻塞,直到测量程序退出
local measure_output = measure:read('*a')
f:close()

-- 对输出做你想要的事情
2014-11-20 11:04:10
用户4379818
用户4379818

我不知道这个能不能帮上忙:

local tasks = {  } -- 队列

local task = coroutine.wrap -- 别名

local function suspend ( )
  return coroutine.yield (true)
end

local function shift (xs)
  return table.remove (xs, 1) -- 移除第一个元素
end

local function push (xs, x)
  return table.insert (xs, x) -- 插入到最后位置
end

local function enqueue (f)
  return push (tasks, task (f))
end

-- 开始运行任务 --
local function start ( )
  local curr
  while #tasks > 0 do -- 当任务队列不为空时
    curr = shift (tasks)
    if curr ( ) then push (tasks, curr) end -- 如果任务还活着就将其放回队列
  end
end

-- 创建任务并开始运行 --
local function spawn (f)
  local curr = task (f) --
  if curr ( ) then push (tasks, curr) end
  return start ( )
end

-- 将任务添加到任务队列中 --
enqueue (function ( )
  for i = 1, 3 do
    print ("Ping. <<", i)
    -- os.execute "sleep 1" -- 如果你正在使用 *nix,就取消注释
    suspend( )
  end
end)

-- 另一个任务 --
enqueue (function ( )
  for i = 1, 5 do
    print "..."
    suspend( )
  end
end)

-- 开始运行任务 --
spawn (function ( )
  for i = 1, 5 do
    print ("Pong. >>", i)
    -- os.execute "sleep 1" -- 如果你正在使用 *nix,就取消注释
    suspend( )
  end
end)

-- 脚本结束 --
2014-12-21 08:16:38