python中的多執行緒無法利用多核優勢,如果想要充分地使用多核cpu的資源(os.cpu_count()檢視),在python中大部分情況需要使用多程序。
python提供了multiprocessing。multiprocessing模組用來開啟子程序,並在子程序中執行我們定製的任務(比如函式),該模組與多執行緒模組threading的程式設計介面類似。
簡單的程序程式:
import multiprocessing #join():括號內有引數時,指定等待子程序的時間,時間到了以後繼續向下執行,無引數時,等待子程序執行完畢以後繼續向下執行.引入模組
deftask(arg):
(arg)
defrun():
for i in range(10):#
迴圈建立十個程序
p=multiprocessing.process(target=task,args=(i,))
p.start()
#準備好執行程序
if__name__=="
__main__":
run()
daemon():括號內預設值是false,手動改成true後,優先執行主程序,執行完不等待子程序是否已經執行完.
name():建立程序名稱 name=multiprocessing.current_process()#獲取執行緒名字
1 類繼承方法建立:
import2普通方法multiprocessing
class
myprocess(multiprocessing.process):
defrun(self):
print("
當前程序是:
",multiprocessing.current_process())
defrun():
p1=myprocess()#程序一
p1.start() #自動執行類裡面的run方法
p2=myprocess()
p2.start()
#程序二
if__name__=="
__main__":
run()
import1 queue:multiprocessing
deftask():
print("
當前程序是:
",multiprocessing.current_process())
defrun():
for i in range(2):
p=multiprocessing.process(target=task,)
p.start()
if__name__=="
__main__":
run()
importmultiprocessing
deftask(arg,q):
q.put(arg)
if__name__=="
__main__":
q =multiprocessing.queue()
for i in range(10):
p = multiprocessing.process(target=task,args=(i,q,))
p.start()
while
true:
v =q.get()
print(v)
importlinuxmulprocessing
q =multiprocessing.queue()
deftask(arg,q):
q.put(arg)
defrun():
for i in range(10):
p = multiprocessing.process(target=task, args=(i, q,))
p.start()
while
true:
v =q.get()
(v)run()
2 manger:
importmultiprocessing
import
time
deffunc(arg,dic):
time.sleep(2)
dic[arg] = 100
if__name__ == "
__main__":
m =multiprocessing.manager()
dic =m.dict()
process_list =
for i in range(10):
p = multiprocessing.process(target=func, args=(i, dic,))
p.start()
while
true:
count=0
for p in
process_list:
ifnot
p.is_alive():
count+=1
if count==len(process_list):
break
print(dic)
importtime
import
multiprocessing
lock =multiprocessing.rlock()
deftask(arg):
print('
鬼子來了')
lock.acquire()
time.sleep(2)
(arg)
lock.release()
if__name__ == '
__main__':
p1 = multiprocessing.process(target=task,args=(1,))
p1.start()
p2 = multiprocessing.process(target=task, args=(2,))
p2.start()
importmultiprocessing
from concurrent.futures import
processpoolexecutor
deftask():
print("
當前程序是:
",multiprocessing.current_process())
time.sleep(1)
if__name__=="
__main__":
pool=processpoolexecutor(5)
for i in range(10):
pool.submit(task,)
列印結果為:
當前程序是:
當前程序是:
當前程序是:
當前程序是:
當前程序是:
一秒鐘以後:
當前程序是:
當前程序是:
當前程序是:
當前程序是:
當前程序是:
importrequests
from bs4 import
beautifulsoup
from concurrent.futures import
processpoolexecutor,threadpoolexecutor
deftask(url):
(url)
r1=requests.get(url=url,headers=)
# soup=beautifulsoup(r1.text,'
html.parser')
(soup.text)
#content_list=soup.find('div',attrs=)
#for item in content_list.find_all('div',attr=)
#title = item.find('a').text.strip()
#target_url = item.find('a').get('href')
#print(title,target_url)
defrun():
pool=threadpoolexecutor(5)
for i in range(1,50):
pool.submit(task,
''%i)
程序的相關操作
shellexecute 進行程序的建立,屬於 shell api int iret int shellexecute m hwnd,t open t notepad.exe t c 123.txt null,sw show int iret int shellexecute m hwnd,t op...
論 程序 相關操作
程序相關概念 1 程序 是乙個能夠分配處理器並由處理器執行的,能夠攜帶資源的活動實體。2 程序控制塊 pcb 每乙個程序中都有唯一的乙個程序控制塊來儲存程序的相關資訊,實際pcb就是乙個task struct的結構體。具體的見 3 程序狀態 程序是乙個活動實體,並不代表程序是一直處於執行狀態,乙個程...
Linux系統基礎 程序相關操作
程序與程式 程式 儲存在磁碟上的檔案,包含可執行指令和資料的靜態實體 程序 執行中的程式 乙個程式可以執行多次,載入出多個程序 程序就是處於活動狀態的電腦程式 程序的分類 互動程序 有輸入有輸出。使用者可以根據自己的情況輸入資料,得到想要的結果 一般程序 批處理程序 由指令碼載入執行的程式 linu...