package require Thread
proc multi_thread_job {job_cmds job_thread} {
set tpool [tpool::create -maxworkers $job_thread]
set job_idx 1
set tjobs ""
foreach job_cmd $job_cmds {
puts "=== job $job_idx start! ==="
lappend tjobs [tpool::post -nowait $tpool $job_cmd]
incr job_idx
}
foreach tjob $tjobs {
tpool::wait $tpool $tjob
}
tpool::release $tpool
}
set jobs {
{puts 1;exec sleep 1}
{puts 2;exec sleep 2}
{puts 3;exec sleep 3}
{puts 4;exec sleep 4}
{puts 5;exec sleep 5}
{puts 6;exec sleep 6}
{puts 7;exec sleep 7}
{puts 8;exec sleep 8}
{puts 9;exec sleep 9}
{puts 10;exec sleep 10}
}
multi_thread_job $jobs 5
我认为理想的结果应该同时打印 1,2,3,4,5,然后每秒打印 6,7,8,9,10... 但结果是像串行一样打印 1,2,3,4,5,6,7,8,9,10。
如何修复此 Tcl 代码以获得并行版本?
我知道如何解决它。 “tpool::post -nowait”这里应该没有“-nowait”!!!
我在下面引用了这个: https://www.tcl.tk/man/tcl/ThreadCmd/tpool.htm#M10