#如何使用多程序
#由於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 ...