如何使用多程序python

2021-09-17 04:21:27 字數 2019 閱讀 4387

#如何使用多程序

#由於python中全域性解釋鎖(gil)的存在,在任意時刻只允許乙個執行緒在直譯器中執行,

# 因此python的多執行緒不適合處理cpu密集型任務,想要處理cpu密集型任務,可以使用多程序模型

#解決方案:使用標準庫中multiprocessing.process,它可以啟動子程序執行任務,操作介面,

# 程序間通訊,程序同步等都與threading.thread類似

'''如何使用它'''

from multiprocessing import process

def d(s):

print (s)

p=process(target=f,args=('hello',))

p.start()

p.join()

x=1def():

global x

x=5f()'''程序間如何通訊'''

from multiprocessing import queue,pipe

import queue

q=queue()

q.put(1)

q.get()

def f(q):

print('start')

print (q.get())

print('end')

#啟動乙個子程序

process(target=f,args=(q,)).start()

#pipe使用:會建立雙向管道

c1,c2=pipe()

c1.send('abc')#傳入資料

c2.recv()#c2端讀取出來

c2.send('xys')

c1.recv()

def f(c):

c.send(c.recv()*2)

c1,c2=pipe()

process(target=f,args=(c2,)).start()

c1.send(55)

c1.recv()

#以多程序多執行緒執行乙個cpu任務,對比執行時間

# 尋找水仙花數演算法

#第乙個函式判斷某數是否水仙花數

def isarmstrong(n):

a,t=,n

while t>0:

t/=10

k = len(a)

return sum(x**k for x in a)==n

def findarmstrong(a,b):

print(a,b)

res =[k for k in range(a,b) if isarmstrong(k)]

print ('%s ~ %s' % (a,b,res))

def findbythread(*argslist):

workers =

for args in argslist:

worker=thread(target=findarmstrong,args=args)

worker.start()

for worker in workers:

worker.join()

def findbyprocess(*argslist):

workers=

for args in argslist:

worker=process(target=findarmstrong,args=args)

worker.start()

for worker in workers:

worker.join()

if __name__=='__main__':

import time

start =time.time()

findbyprocess((20000000,30000000),(25000000,30000000))

#findbythread((20000000, 30000000), (25000000, 30000000))#多執行緒

print(time.time()-start)

python使用多程序

python多執行緒適合io密集型場景,而在cpu密集型場景,並不能充分利用多核cpu,而協程本質基於執行緒,同樣不能充分發揮多核的優勢。針對計算密集型場景需要使用多程序,python的multiprocessing與threading模組非常相似,支援用程序池的方式批量建立子程序。只需要例項化pr...

python多程序 python多程序

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

多程序 如何使用多程序處理多個任務

以下 用以建立兩個子程序處理任務,通過基本的 框架講解如何使用fork建立很明確的子程序處理任務。int groupcount 2 char ptaskgroup 2 pid t pid 1 for int i 0 i groupcount i else parent process if pid ...