Posted to tcl by bairui at Sat Apr 29 23:27:30 GMT 2017view raw
- 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"