38 執行緒及其方法

2022-05-09 23:14:12 字數 2071 閱讀 8534

執行緒池

1、為什麼會有程序池?

開啟過多的程序1)開啟程序浪費時間2)作業系統排程太多的程序也會影響效率

2、開程序池

有幾個現成的程序在池子裡,有任務來了,就用池子裡的程序取處理任務

任務處理完之後,就把程序放回到池子裡,池子裡的程序就能取處理其他的任務了

當所有的額任務處理完了,程序池關閉,**所有程序。

3、開啟的程序數:cpu的數量+1

下面是關於程序池非同步呼叫和同步呼叫。 

import

time

from multiprocessing import

pool

deffun(i):

time.sleep(1)

i+=1

print

(i)if

__name__ =='

__main__':

p=pool(4)

for i in range(10):

p.close() #

沒有這句話,主程序會先結束,留下子程序殘留,**麻煩。這句話的意思是關閉程序池,不能再往程序池中新增任務了

p.join() #

阻塞等待,等待程序池中所有程序結束

import

time

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的用法:

import

time

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 import

pool

deffun(i):

return i*'*'

defcall(arg):

print

(arg)

if__name__ =='

__main__':

p=pool(4)

for i in range(10):

p.close()

p.join()

**函式在網頁處理中的作用:

import

requests

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