|
Hi, I have a problem with using different lanes to start
commands with popen simultaneously. The read()s seems to block all other lanes resulting
in a sequential behaviour? To reproduce, run: require("lanes") function run(i) local file = io.popen("sleep 5",
"r") -- local output = file:read("*a") file:close() print("finished " .. i) end local measurements = {} local lane = lanes.gen("*", run) for second = 0, 10 do measurements[second] = lane(second)
end for second = 0, 10 do measurements[second]:join() end => # time ./test.lua finished 1 finished 0 finished 3 finished 4 finished 5 finished 2 finished 9 finished 6 finished 7 finished 10 finished 8 real 0m5.016s ßpopen
sleeps are executed in parallel, which to me is the expected behaviour Then uncomment the file:read() line and run again => # time ./test.lua finished 0 finished 3 finished 1 finished 2 finished 6 finished 5 finished 9 finished 8 finished 7 finished 10 finished 4 real 0m45.043s ß
popen sleeps are executed (almost) sequentially Kind regards, Fredrik Widlund |