Posted to tcl by bairui at Sat Apr 29 23:27:30 GMT 2017view pretty

package require Thread

set unfinished_work {1 2 3 4 5 6 7 8 9 10}
set finished_work   {}
set n_workers       7
set workers         {}

set pool [tpool::create -maxworkers $::n_workers -initcmd {
    proc do_work {work} {
      puts "Worker doing $work"
      after 1000 ;# simulate workload
      return [list [expr int(rand() * 10) * $work] [tsv::incr sync result]]
    }
  }]

foreach work $unfinished_work {
  lappend workers [tpool::post $pool [list do_work $work]]
}

foreach worker $workers {
  set job [tpool::wait $pool $worker]
  puts "Main collecting job $job"
  lappend finished_work [tpool::get $pool $job]
}

puts "Main finished: $finished_work"