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