如何无需在文件内使用dofile,同时运行多个带循环的Lua文件?
可行,两种方案任你选
一、单进程内用协程实现"伪并行"
Lua本身是单线程的,但可以通过协程让两个循环交替执行,看起来像同时运行。你只需要写一个简单的启动脚本:
创建run_both.lua:
-- 把两个脚本的逻辑封装成函数 local function run_script1() dofile("script1.lua") end local function run_script2() dofile("script2.lua") end -- 创建两个协程 local co1 = coroutine.create(run_script1) local co2 = coroutine.create(run_script2) -- 交替调度协程 while true do -- 执行script1的协程一步 local ok1, err1 = coroutine.resume(co1) if not ok1 then print("script1出错:", err1) break end -- 执行script2的协程一步 local ok2, err2 = coroutine.resume(co2) if not ok2 then print("script2出错:", err2) break end -- 两个协程都结束就退出 if coroutine.status(co1) == "dead" and coroutine.status(co2) == "dead" then break end end
运行时直接执行lua run_both.lua即可。但要注意:这种方式是交替执行,不是真正的并行。如果你的循环是CPU密集型的,必须在每个循环里加coroutine.yield()主动交出控制权,比如:
script1.lua里的循环改成:
while true do -- 你的业务逻辑 print("script1在运行") coroutine.yield() -- 让给另一个协程执行 end
二、多进程实现真正并行(推荐)
如果要让两个脚本真正同时运行(比如都是CPU密集型任务),直接用系统命令启动两个独立的Lua进程就行,完全不用额外写Lua脚本:
Windows命令行:
start lua script1.lua & start lua script2.lua
Linux/macOS终端:
lua script1.lua & lua script2.lua &
这样两个脚本会作为独立进程并行执行,互相不干扰,完美符合你"仅调用文件名"的需求。
总结
- 伪并行(单进程内交替):适合IO密集型任务,需要写启动脚本;
- 真并行(多进程):直接用系统命令,简单粗暴,满足你的核心需求。
内容的提问来源于stack exchange,提问作者SDFGSBE
相关产品推荐
相关产品推荐

