Python 多程序與程序池

2022-08-31 02:51:11 字數 2105 閱讀 2646

# fork方法是呼叫一次,返回兩次,原因在於作業系統將當前程序(父程序)複製出乙份程序(子程序),這兩個程序幾乎完全相同,

# 於是fork方法分別在父程序和子程序中返回。子程序中永遠返回0,父程序中返回的是子程序的id。

importos 

if__name__ == '

__main__':

print('

current process (%s) start ...

' %(os.getpid()))

pid =os.fork()

print

(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()方法實現程序間的同步。

import

osfrom 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 import

pool

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...