Dependencies
moon add mizchi/process_poollet pool = @process_pool.ProcessPool::new(max_workers=4)
let results = pool.run_all([
@process_pool.job("echo", ["hello"]),
@process_pool.job("echo", ["world"]),
])
assert_eq(results.length(), 2)
assert_eq(results[0].exit_code, 0)
assert_eq(results[1].exit_code, 0)let pool = @process_pool.ProcessPool::new(max_workers=2)
let results = pool.run_all([
@process_pool.job("sleep", ["10"], timeout=100), // 100ms timeout
])
assert_eq(results.length(), 1)
assert_true(results[0].timed_out)let pool = @process_pool.ProcessPool::new(max_workers=2)
let mut caught = false
// Raises JobError if any job fails
ignore(pool.run_all_checked([
@process_pool.job("echo", ["hello"]),
@process_pool.job("false", []), // This will fail
])) catch {
@process_pool.JobError::ProcessFailed(..) => {
caught = true
}
_ => ()
}
assert_true(caught)let count = @ref.new(0)
let callback = @process_pool.OnJobComplete(fn(_result) {
count.update(fn(n) { n + 1 })
})
let pool = @process_pool.ProcessPool::new(
max_workers=4,
on_complete=callback,
)
let results = pool.run_all([
@process_pool.job("echo", ["task1"]),
@process_pool.job("echo", ["task2"]),
])
assert_eq(results.length(), 2)
assert_eq(count.val, 2)let pool = @process_pool.ProcessPool::new(max_workers=4)
let items = ["a", "b", "c"]
let results = pool.map(items, fn(item) {
@process_pool.job("echo", [item])
})
assert_eq!(results.length(), 3)
for result in results {
assert_eq(result.exit_code, 0)
}///|
let _a : @process_pool.Job = @process_pool.job("echo", ["hello"])# 1. Generate test documents (16 files, ~5000 words each)
node example/scripts/generate_docs.mjs
# 2. Run the benchmark
cd example && moon run --target native .| Workers | Time | Speedup |
|---|---|---|
| 1 | 632ms | baseline |
| 2 | 315ms | 2.00x |
| 4 | 194ms | 3.25x |
| 8 | 160ms | 3.95x |
| Platform | Status |
|---|---|
| Native | Full support |
| JS (Node.js) | Full support |
| WASM | Not implemented |
| WASM-GC | Not implemented |
#deprecated("Use `struct T(A)` to declare a newtype and use `.0` access the underlying type instead.")
fn OnJobComplete::inner(self : OnJobComplete) -> ((JobResult) -> Unit)async fn[T] ProcessPool::map(self : ProcessPool, items : Array[T], to_job : (T) -> Job) -> Array[JobResult]Dependencies