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"