第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

即使完成一些工作,也要不斷填滿四個并行進(jìn)程的插槽

即使完成一些工作,也要不斷填滿四個并行進(jìn)程的插槽

BIG陽 2021-03-30 13:14:26
我有一個腳本,可以一次運(yùn)行4個進(jìn)程的批處理,我不在乎獲取每個proc的返回碼。我永遠(yuǎn)不想同時運(yùn)行4個以上的proc。以下方法的問題在于它一次最多不能填充4個進(jìn)程。例如,如果proc2和proc3提早完成,我希望proc 5和6啟動,而不是僅在1-4完成后才啟動。我如何在bash中實(shí)現(xiàn)這一目標(biāo)?run_func_1 &run_func_2 &run_func_3 &run_func_4 &waitrun_func_5 &run_func_6 &run_func_7 &run_func_8 &wait
查看完整描述

2 回答

?
富國滬深

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個贊

我嘗試使用工作人員池和工作隊(duì)列來執(zhí)行自定義實(shí)現(xiàn)。新工人將在上一個工人完成任務(wù)后立即將其從隊(duì)列中移出。


您可能可以根據(jù)需要修改此腳本,但我希望您會明白我的意圖。


這是腳本:


#!/bin/bash


f1() { echo Started f1; sleep 10; echo Finished f1; }

f2() { echo Started f2; sleep 8; echo Finished f2; }

f3() { echo Started f3; sleep 12; echo Finished f3; }

f4() { echo Started f4; sleep 14; echo Finished f4; }

f5() { echo Started f5; sleep 7; echo Finished f5; }


declare -r MAX_WORKERS=2

declare -a worker_pids

declare -a jobs=('f1' 'f2' 'f3' 'f4' 'f5')


available_worker_index() {

    # If number of workers is less than MAX_WORKERS

    # We still have workers that are idle

    declare worker_count="${#worker_pids[@]}"

    if [[ $worker_count -lt $MAX_WORKERS ]]; then

        echo "$worker_count"

        return 0

    fi


    # If we reached this code it means

    # All workers are already created and executing a job

    # We should check which of them finished and return it's index as available

    declare -i index=0

    for pid in "${worker_pids[@]}"; do

        is_running=$(ps -p "$pid" > /dev/null; echo "$?")

        if [[ $is_running != 0 ]]; then

            echo "$index"

            return 0

        fi

        index+=1

    done


    echo "None"

}


for job in "${jobs[@]}"; do

    declare worker_index

    worker_index=$(available_worker_index)

    while [[ $worker_index == "None" ]]; do

        # Wait for available worker

        sleep 3

        worker_index=$(available_worker_index)

    done


    # Run the job in background

    "$job" &


    # Save it's pid for later

    pid="$!"

    worker_pids["$worker_index"]="$pid"

done


# Wait all workers to finish

wait

您只需更改MAX_WORKERS變量即可輕松更改工作池的大小。


查看完整回答
反對 回復(fù) 2021-04-16
  • 2 回答
  • 0 關(guān)注
  • 408 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號