Python多程序操作初探

2021-09-19 08:36:35 字數 2741 閱讀 6613

unix/linux作業系統提供了乙個fork()系統呼叫,python的os模組封裝了常見的系統呼叫,其中就包括fork,可以在python程式中輕鬆建立子程序:

import os

print('process (%s) start...' % os.getpid())

# only works on unix/linux/mac:

pid = os.fork()

if pid == 0:

print('i am child process (%s) and my parent is %s.' % (os.getpid(), os.getppid()))

else:

print('i (%s) just created a child process (%s).' % (os.getpid(), pid))

執行結果:

process (37) start...

i (37) just created a child process (38).

process (37) start...

i am child process (38) and my parent is 37.

windows沒有fork呼叫,上面的**在windows上無法執行。

multiprocessing模組提供了乙個process類來代表乙個程序物件

from multiprocessing import process

import os

# 子程序要執行的**

def run_proc(name):

print('run child process %s (%s)...' % (name, os.getpid()))

if __name__=='__main__':

print('parent process %s.' % os.getpid())

p = process(target=run_proc, args=('test',))

print('child process will start.')

p.start()

p.join()

print('child process end.')

執行結果:

d:\develop\python3.6\python.exe d:/develop/pythondemo/123/demo.py

parent process 13264.

child process will start.

run child process test (10648)...

child process end.

建立子程序時,只需要傳入乙個執行函式和函式的引數,建立乙個process例項,用start()方法啟動,這樣建立程序比fork()還要簡單。

join()方法可以等待子程序結束後再繼續往下執行,通常用於程序間的同步。

from multiprocessing import pool

import os, time, random

def long_time_task(name):

print('run task %s (%s)...' % (name, os.getpid()))

start = time.time()

time.sleep(random.random() * 3)

end = time.time()

print('task %s runs %0.2f seconds.' % (name, (end - start)))

if __name__=='__main__':

print('parent process %s.' % os.getpid())

p = pool(4)

for i in range(5):

print('waiting for all subprocesses done...')

p.close()

p.join()

print('all subprocesses done.')

執行結果:

d:\develop\python3.6\python.exe d:/develop/pythondemo/123/demo.py

parent process 11476.

waiting for all subprocesses done...

run task 0 (11512)...

run task 1 (12492)...

run task 2 (8628)...

run task 3 (4300)...

task 2 runs 0.22 seconds.

run task 4 (8628)...

task 0 runs 0.66 seconds.

task 4 runs 1.03 seconds.

task 3 runs 1.76 seconds.

task 1 runs 2.89 seconds.

all subprocesses done.

初探PHP多程序

我們都知道php是單程序執行的,php處理多併發主要是依賴伺服器或php fpm的多程序及它們程序的復用,但php實現多程序也意義重大,尤其是在後台cli模式下處理大量資料或執行後台demon守護程序時,多程序的優勢不用多說。php的多執行緒也曾被人提及,但程序內多執行緒資源共享和分配的問題難以解決...

初探PHP多程序

我們都知道php是單程序執行的,php處理多併發主要是依賴伺服器或php fpm的多程序及它們程序的復用,但php實現多程序也意義重大,尤其是在後台cli模式下處理大量資料或執行後台demon守護程序時,多程序的優勢不用多說。php的多執行緒也曾被人提及,但程序內多執行緒資源共享和分配的問題難以解決...

初探PHP多程序

body blog calendar p,blockquote,ul,ol,dl,table,pre h1,h2,h3,h4,h5,h6 h1 tt,h1 code,h2 tt,h2 code,h3 tt,h3 code,h4 tt,h4 code,h5 tt,h5 code,h6 tt,h6 co...