以下**用以建立兩個子程序處理任務,通過基本的**框架講解如何使用fork建立很明確的子程序處理任務。
int groupcount = 2;
char *ptaskgroup[2];
pid_t pid = -1;
for (int i = 0; i < groupcount; ++i)
else // parent process
}}
} if (pid == -1)
else if (pid == 0) // 子程序
else // 父程序
// visionloop();
}
[lv:2]: pid --------------11 [12234] <2019-03-21_17:34:20><../src/main.c:143>
[lv:2]: pid --------------22 [12234] <2019-03-21_17:34:20><../src/main.c:157>
[lv:2]: pid --------------11 [0] <2019-03-21_17:34:20><../src/main.c:143>
[lv:2]: this is children pid 1 [12234], ... <2019-03-21_17:34:20><../src/main.c:146>
[lv:2]: this is children pid 2 [12234], ... <2019-03-21_17:34:20><../src/main.c:172>
[lv:2]: pid --------------11 [12235] <2019-03-21_17:34:20><../src/main.c:143>
[lv:2]: pid --------------22 [12235] <2019-03-21_17:34:20><../src/main.c:157>
[lv:2]: pid [0]-------------- [12234] <2019-03-21_17:34:20><../src/main.c:183>
[lv:2]: pid --------------11 [0] <2019-03-21_17:34:20><../src/main.c:143>
[lv:2]: pid [1]-------------- [12235] <2019-03-21_17:34:20><../src/main.c:183>
[lv:2]: this is children pid 1 [12235], ... <2019-03-21_17:34:20><../src/main.c:146>
[lv:2]: this is children pid 2 [12235], ... <2019-03-21_17:34:20><../src/main.c:172>
在執行pid = fork();
之後子程序已經被建立,此時子程序賦值主程序的所有資料,父程序和子程序同時繼續向後執行。通過執行的日誌資訊可以知道,父程序先執行
// 父程序順序執行列印了變數pid儲存的子程序的id號,同時執行屬於父程序的 else部分**,以下第二行列印。
[lv:2]: pid --------------11 [12234] <2019-03-21_17:34:20><../src/main.c:143>
[lv:2]: pid --------------22 [12234] <2019-03-21_17:34:20><../src/main.c:157>
隨後子程序也開始執行
[lv:2]: pid --------------11 [0] <2019-03-21_17:34:20><../src/main.c:143>
[lv:2]: this is children pid 1 [12234], ... <2019-03-21_17:34:20><../src/main.c:146>
[lv:2]: this is children pid 2 [12234], ... <2019-03-21_17:34:20><../src/main.c:172>
因為建立程序fork()在 for迴圈中,那麼當建立子程序完成之後 ,如果不退出當前迴圈,子程序也會執行for迴圈,那樣的話,子程序又會建立子程序,這樣就不符合我們一開始建立2個子程序的初衷。所以才有以下**。
if (pid == 0 || pid == -1)
隨後建立第二個子程序,順序和方法同第乙個。
主程序在迴圈中建立子程序完成之後,退出迴圈,然後在主程序中列印建立的子程序的pid.
[lv:2]: pid [0]-------------- [12234] <2019-03-21_17:34:20><../src/main.c:183>
[lv:2]: pid [1]-------------- [12235] <2019-03-21_17:34:20><../src/main.c:183>
多程序 多程序queue
多程序 import multiprocessing import threading import time defthread run print threading.get ident defrun name time.sleep 2 print hello name t threading....
如何使用多程序python
如何使用多程序 由於python中全域性解釋鎖 gil 的存在,在任意時刻只允許乙個執行緒在直譯器中執行,因此python的多執行緒不適合處理cpu密集型任務,想要處理cpu密集型任務,可以使用多程序模型 解決方案 使用標準庫中multiprocessing.process,它可以啟動子程序執行任務...
python多程序 python多程序
當有多個非相關任務需要處理時,並行能大大提高處理速度。這裡簡要介紹python的multiprocessing模組。簡單多程序編寫 當我們任務數量確定而且比較少的時候,可以手動為每個任務指定乙個程序來執行。import multiprocessing as mp def f a print a if...