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 $tpool $job_cmd]
}
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
参考 https://zhuanlan.zhihu.com/p/27762788?utm_id=0 中的内容,删除了互锁等复杂内容,仅保留多线程任务提交