# fork方法是呼叫一次,返回兩次,原因在於作業系統將當前程序(父程序)複製出乙份程序(子程序),這兩個程序幾乎完全相同,
# 於是fork方法分別在父程序和子程序中返回。子程序中永遠返回0,父程序中返回的是子程序的id。
importosif__name__ == '
__main__':
print('
current process (%s) start ...
' %(os.getpid()))
pid =os.fork()
(pid)
if pid <0:
print('
error in fork')
elif pid ==0:
print('
i am child process(%s) and my parent process is (%s)
' %(os.getpid(), os.getppid()))
else
:
print('
i(%s) created a chlid process (%s).
' % (os.getpid(), pid))
# multiprocessing模組提供了乙個process類來描述乙個程序物件。
# 建立子程序時,只需要傳入乙個執行函式和函式的引數,即可完成乙個process例項的建立,
# 用start()方法啟動程序,用join()方法實現程序間的同步。
importosfrom multiprocessing import
process
defrun_proc(name):
print('
child process %s (%s) running...
' %(name, os.getpid()))
if__name__ == '
__main__':
print('
parent process %s.
' %os.getpid())
for i in range(5):
p = process(target=run_proc, args=(str(i),))
print('
process will start.')
p.start()
p.join()
print('
process end.
')
# pool可以提供指定數量的程序供使用者呼叫,預設大小是cpu的核數。當有新的請求提交到pool中時,如果池還沒有滿,
# 那麼就會建立乙個新的程序用來執行該請求;但如果池中的程序數已經達到規定最大值,
# 那麼該請求就會等待,直到池中有程序結束,才會建立新的程序來處理它。
from multiprocessing importpool
import
os, time, random
defrun_task(name):
print('
task %s (pid = %s) is running...
' %(name, os.getpid()))
time.sleep(random.random() * 3)
print('
task %s end.
' %name)
if__name__ == '
__main__':
print('
current process %s.
' %os.getpid())
p = pool(processes=3)
for i in range(5):
print('
waiting for all subprocesses done...')
p.close()
p.join()
#join方法會等待所有子程序執行完畢
print('
all subprocesses done.
')
python多程序之程序池
在利用python進行系統管理的時候,特別是同時操作多個檔案目錄,或者遠端控制多台主機,並行操作可以節約大量的時間。當被操作物件數目不大時,可以直接利用multiprocessing中的process動態成生多個程序,十幾個還好,但如果是上百個,上千個目標,手動的去限制程序數量卻又太過繁瑣,此時可以...
python 多程序 高階 程序池
如果需要啟動大量的子程序,使用程序池批量建立子程序的方式更加常見,因為當被操作對物件數目不大時,可以直接利用multiprocessing中的process動態生成多個程序,如果數量大,此時就應該使用pool。pool 可以提供指定數量的程序供使用者呼叫,預設大小是cpu的核數。當有新的請求提交到p...
Python多程序 程序池pool
from multiprocessing import process,pool import time defselect time.sleep 1 print time.ctime return 這是每個進行執行完後返回的值,該值會會被 callback函式接收 def foo args pri...