Skip to content

Commit c79f4cc

Browse files
authored
More flexible addworker interface (#63)
1 parent ba1cd5e commit c79f4cc

File tree

3 files changed

+35
-4
lines changed

3 files changed

+35
-4
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
1717
[compat]
1818
Dates = "1"
1919
IOCapture = "0.2.5"
20-
Malt = "1.2.1"
20+
Malt = "1.3.0"
2121
Printf = "1"
2222
Random = "1"
2323
Scratch = "1.3.0"

src/ParallelTestRunner.jl

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -414,15 +414,36 @@ worker_id(wrkr) = WORKER_IDS[wrkr.proc_pid]
414414
Add `X` worker processes.
415415
"""
416416
addworkers(X; kwargs...) = [addworker(; kwargs...) for _ in 1:X]
417-
function addworker(; env=Vector{Pair{String, String}}())
417+
418+
"""
419+
addworker(; env=Vector{Pair{String, String}}(), exename=nothing, exeflags=nothing)
420+
421+
Add a single worker process.
422+
423+
## Arguments
424+
- `env`: Vector of environment variable pairs to set for the worker process.
425+
- `exename`: Custom executable to use for the worker process.
426+
- `exeflags`: Custom flags to pass to the worker process.
427+
"""
428+
function addworker(;
429+
env = Vector{Pair{String, String}}(),
430+
exename = nothing, exeflags = nothing
431+
)
418432
exe = test_exe()
419-
exeflags = exe[2:end]
433+
if exename === nothing
434+
exename = exe[1]
435+
end
436+
if exeflags !== nothing
437+
exeflags = vcat(exe[2:end], exeflags)
438+
else
439+
exeflags = exe[2:end]
440+
end
420441

421442
push!(env, "JULIA_NUM_THREADS" => "1")
422443
# Malt already sets OPENBLAS_NUM_THREADS to 1
423444
push!(env, "OPENBLAS_NUM_THREADS" => "1")
424445

425-
wrkr = Malt.Worker(;exeflags, env)
446+
wrkr = Malt.Worker(; exename, exeflags, env)
426447
WORKER_IDS[wrkr.proc_pid] = length(WORKER_IDS) + 1
427448
return wrkr
428449
end

test/runtests.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ end
6868
function test_worker(name)
6969
if name == "needs env var"
7070
return addworker(env = ["SPECIAL_ENV_VAR" => "42"])
71+
elseif name == "threads/2"
72+
return addworker(exeflags = ["--threads=2"])
7173
end
7274
return nothing
7375
end
@@ -77,6 +79,12 @@ end
7779
end,
7880
"doesn't need env var" => quote
7981
@test !haskey(ENV, "SPECIAL_ENV_VAR")
82+
end,
83+
"threads/1" => quote
84+
@test Base.Threads.nthreads() == 1
85+
end,
86+
"threads/2" => quote
87+
@test Base.Threads.nthreads() == 2
8088
end
8189
)
8290

@@ -86,6 +94,8 @@ end
8694
str = String(take!(io))
8795
@test contains(str, r"needs env var .+ started at")
8896
@test contains(str, r"doesn't need env var .+ started at")
97+
@test contains(str, r"threads/1 .+ started at")
98+
@test contains(str, r"threads/2 .+ started at")
8999
@test contains(str, "SUCCESS")
90100
end
91101

0 commit comments

Comments
 (0)