Separate files per thread

This commit is contained in:
Empathic Qubit 2021-04-23 18:09:35 -04:00
parent 6099589f8b
commit faccd03b82
3 changed files with 53 additions and 35 deletions

View file

@ -411,13 +411,13 @@ local function loadFile(filename, after)
return
end
local contents = file:read("*all")
local obj, err = serpent.load(libDeflate:DecompressDeflate(contents:sub(11, #contents - 8)))
local obj, err = loadstring(libDeflate:DecompressDeflate(contents:sub(11, #contents - 8)))
if err ~= nil then
message(string.format("Error parsing: %s", err), 0x00990000)
return
end
pool = obj
pool = obj()
end
local function savePool()

View file

@ -2,12 +2,19 @@ local base = string.gsub(@@LUA_SCRIPT_FILENAME@@, "(.*[/\\])(.*)", "%1")
local Runner = dofile(base.."/runner.lua")
local serpent = dofile(base.."/serpent.lua")
local util = dofile(base.."/util.lua")
local runnerDataFile = io.open(os.getenv("RUNNER_DATA"), 'r')
local runnerData, err = loadstring(runnerDataFile:read('*a'))
runnerDataFile:close()
local runnerData, err = serpent.load(os.getenv("RUNNER_DATA"))
if err ~= nil then
print(err)
return
end
runnerData = runnerData()
local speciesIndex = runnerData[3]
local filename = runnerData[4]

View file

@ -64,12 +64,20 @@ return function()
end
_M.run = function(species, generationIdx, speciesIdx, genomeCallback, finishCallback)
local trunc = io.open(tmpFileName, 'w')
trunc:close()
local poppets = {}
for i=1,#species,1 do
local poppet = io.popen("RUNNER_DATA='"..serpent.dump({species[i], generationIdx, speciesIdx + i - 1, tmpFileName}).."' lsnes --rom="..base.."/rom.sfc --unpause --lua="..base.."/runner-process.lua", 'r')
local outputFileName = tmpFileName..'_output_'..i
local trunc = io.open(outputFileName, 'w')
trunc:close()
local inputFileName = tmpFileName.."_input_"..i
local inputFile = io.open(inputFileName, 'w')
inputFile:write(serpent.dump({species[i], generationIdx, speciesIdx + i - 1, outputFileName}))
inputFile:close()
local cmd = "RUNNER_DATA=\""..inputFileName.."\" lsnes \"--rom="..base.."/rom.sfc\" --unpause \"--lua="..base.."/runner-process.lua\""
message(_M, cmd)
local poppet = io.popen(cmd, 'r')
table.insert(poppets, poppet)
end
@ -79,36 +87,39 @@ return function()
poppet:close()
end
local tmpFile = io.open(tmpFileName, "r")
local line = ""
repeat
local obj, err = serpent.load(line)
if err ~= nil then
goto continue
end
for i=1,#species,1 do
local outputFileName = tmpFileName..'_output_'..i
local outputFile = io.open(outputFileName, "r")
local line = ""
repeat
local obj, err = loadstring(line)
if err ~= nil then
goto continue
end
if obj.type == 'onMessage' then
message(_M, obj.msg, obj.color)
elseif obj.type == 'onLoad' then
load(_M, obj.filename)
elseif obj.type == 'onSave' then
save(_M, obj.filename)
elseif obj.type == 'onGenome' then
species[obj.speciesIndex - speciesIdx + 1].genomes[obj.genomeIndex] = obj.genome
genomeCallback(obj.genome, obj.index)
elseif obj.type == 'onFinish' then
finishCallback()
end
obj = obj()
::continue::
line = tmpFile:read()
until(line == "")
tmpFile:close()
local ok, err = os.remove(tmpFileName)
if err ~= nil then
message(_M, err)
elseif ok ~= true then
message(_M, 'UNSPECIFIED ERROR ON REMOVAL')
if obj == nil then
goto continue
end
if obj.type == 'onMessage' then
message(_M, obj.msg, obj.color)
elseif obj.type == 'onLoad' then
load(_M, obj.filename)
elseif obj.type == 'onSave' then
save(_M, obj.filename)
elseif obj.type == 'onGenome' then
species[obj.speciesIndex - speciesIdx + 1].genomes[obj.genomeIndex] = obj.genome
genomeCallback(obj.genome, obj.index)
elseif obj.type == 'onFinish' then
finishCallback()
end
::continue::
line = outputFile:read()
until(line == "" or line == nil)
outputFile:close()
end
end