執行緒池
1、為什麼會有程序池?
開啟過多的程序1)開啟程序浪費時間2)作業系統排程太多的程序也會影響效率
2、開程序池
有幾個現成的程序在池子裡,有任務來了,就用池子裡的程序取處理任務
任務處理完之後,就把程序放回到池子裡,池子裡的程序就能取處理其他的任務了
當所有的額任務處理完了,程序池關閉,**所有程序。
3、開啟的程序數:cpu的數量+1
下面是關於程序池非同步呼叫和同步呼叫。
importtime
from multiprocessing import
pool
deffun(i):
time.sleep(1)
i+=1
(i)if
__name__ =='
__main__':
p=pool(4)
for i in range(10):
p.close() #
沒有這句話,主程序會先結束,留下子程序殘留,**麻煩。這句話的意思是關閉程序池,不能再往程序池中新增任務了
p.join() #
阻塞等待,等待程序池中所有程序結束
importtime
from multiprocessing import
pool
deffun(i):
time.sleep(1)
i+=1
returniif
__name__ =='
__main__':
p=pool(4)
res_l=
for i in range(10):
p.close()
p.join()
[print(j.get() )for j in res_l]
關於map的用法:
importtime
from multiprocessing import
pool
deffun(i):
time.sleep(1)
i+=1
returniif
__name__ =='
__main__':
p=pool(4)
ret=p.map(fun,range(10)) #
map傳的必須是可迭代物件
print(ret)
**函式:返回值(結果)傳給**函式,**函式執行。**函式是在主程序中執行的,回掉函式不能傳參,只能接受多程序中函式的返回值。
from multiprocessing importpool
deffun(i):
return i*'*'
defcall(arg):
(arg)
if__name__ =='
__main__':
p=pool(4)
for i in range(10):
p.close()
p.join()
**函式在網頁處理中的作用:
importrequests
from multiprocessing import
pool
defget_url(url):
ret =requests.get(url)
return
defparser(dic):
print(dic['
url'],dic['
status_code
'],len(dic['
content
']))
#把分析結果寫到檔案裡
if__name__ == '
__main__':
url_l =[
'','',
'','',
'']p = pool(4)
for url in
url_l:
p.close()
p.join()
多執行緒問題及其解決方法
程序 就是乙個應用程式。執行緒 cup的切換執行線 使用者執行緒,沒有做其它操作,就是直接建立的執行緒。守護執行緒,可以對執行緒new thread setdaemon true 當主線程執行完成後,守護執行緒也立即結束。主線程就是程式在執行的標緻,當主線程結束,就是程式結束,程式結束所有的執行緒都...
SQL優化常用方法38
避免在索引列上使用is null和is not null 避免在索引中使用任何可以為空的列,oracle將無法使用該索引 對於單列索引,如果列包含空值,索引中將不存在此記錄.對於復合索引,如果每個列都為空,索引中同樣不存在此記錄.如果至少有乙個列不為空,則記錄存在於索引中 舉例 如果唯一性索引建立在...
執行緒狀態及其轉換
1.新建狀態 new 執行緒物件被建立後,就進入了新建狀態。例如,thread thread new thread 2.就緒狀態 runnable 執行緒物件被建立後,其它執行緒呼叫了該物件的start 方法,從而來啟動該執行緒。3.執行狀態 running 執行緒獲取cpu許可權進行執行。4.阻塞...