七 7 5多程序

2022-08-28 13:24:17 字數 2887 閱讀 7971

多程序和多執行緒的區別

多執行緒使用的是cpu的乙個核,適合io密集型

多程序使用的是cpu的多個核,適合運算密集型

元件python提供非常好的多程序包如:multiprocessing

multiprocessing支援紫禁城,通訊,共享資料,執行不同形式的同步,提供是processpipe,lock等元件

multiprocessing 常用的方法

# multiprocessing.active_children()   列出存在的子程序

# cpu_count() 統計cpu個數

例:import multiprocessing

p = multiprocessing.cpu_count()

m = multiprocessing.active_children()

print p

print m

執行結果:

4

process

1、建立乙個process物件

p = multiprocessing.process(target=worker, args=(5,))

注:target=函式名字

args= 函式需要的引數,以tuple的形式傳入

2、process常用方法

is_alive() 判斷程序是否存在

run() 啟動程序

start() 啟動程序,會自動呼叫run方法

join(timeout) 等待程序結束或超時

3、process常用屬性

name 程序名字

pid 程序的pid

例子:

import  multiprocessing

import time

def worker(interval):

time.sleep(interval)

print "hell world!!!"

if __name__ == "__main__":

p = multiprocessing.process(target=worker, args=(5,))

p.start()

print p.pid

print p.is_alive()

p.join()

# p.join(timeout=3) #等待紫禁城執行完畢或者超時退出

print "end main"

print p.name

print p.pid

執行結果:

17348

true

hell world!!!

end main

process-1

17348

多程序例項:

import  time

from datetime import datetime

import multiprocessing

now = datetime.strftime(datetime.now(),"%y-%m-%d %h:%m:%s")

def worker(name,interval):

start = datetime.strftime(datetime.now(), "%y-%m-%d %h:%m:%s")

print " start ".format(name,start)

time.sleep(interval)

end = datetime.strftime(datetime.now(), "%y-%m-%d %h:%m:%s")

print " end ".format(name,end)

if __name__ == "__main__":

print "main start"

print "this computer has cpu".format(multiprocessing.cpu_count())

p1 = multiprocessing.process(target=worker,args=("worker1",2))

p2 = multiprocessing.process(target=worker,args=("worker2",3))

p3 = multiprocessing.process(target=worker,args=("worker3",4))

p1.start()

p2.start()

p3.start()

print multiprocessing.cpu_count()

for p in multiprocessing.active_children():

print "this pid of is ".format(p.name,p.pid)

print "main end"

執行結果:

main start

this computer has 4 cpu

4this pid of process-1 is 19872

this pid of process-3 is 19008

this pid of process-2 is 18844

main end

worker1 start 2017-12-08 23:40:12

worker2 start 2017-12-08 23:40:12

worker3 start 2017-12-08 23:40:12

worker1 end 2017-12-08 23:40:14

worker2 end 2017-12-08 23:40:15

worker3 end 2017-12-08 23:40:16

多程序 多程序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多程序

當有多個非相關任務需要處理時,並行能大大提高處理速度。這裡簡要介紹python的multiprocessing模組。簡單多程序編寫 當我們任務數量確定而且比較少的時候,可以手動為每個任務指定乙個程序來執行。import multiprocessing as mp def f a print a if...

PHP多程序 4 內部多程序

說的都是只相容unix 伺服器的多程序,下面來講講在window 和 unix 都相容的多程序 這裡是泛指,下面的curl實際上是通過io復用實現的 通過擴充套件實現多執行緒的典型例子是curl,curl 支援多執行緒的抓取網頁的功能。這部分過於抽象,所以,我先給出乙個curl並行抓取多個網頁內容的...