人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

手把手帶你了解python多進程,多線程

發(fā)布日期:2022-02-08 13:33 | 文章來源:腳本之家

說明

相應(yīng)的學(xué)習(xí)視頻見鏈接,本文只對重點進行總結(jié)。

多進程

重點(只要看下面代碼的main函數(shù)即可)

1.創(chuàng)建

2.如何開守護進程

3.多進程,開銷大,用for循環(huán)調(diào)用多個進程時,后臺cpu一下就上去了

import time
import multiprocessing
import os
def dance(who,num):
 print("dance父進程:{}".format(os.getppid()))
 for i in range(1,num+1):
  print("進行編號:{}————{}跳舞。。。{}".format(os.getpid(),who,i))
  time.sleep(0.5)
def sing(num):
 print("sing父進程:{}".format(os.getppid()))
 for i in range(1,num+1):
  print("進行編號:{}----唱歌。。。{}".format(os.getpid(),i))
  time.sleep(0.5)
def work():
 for i in range(10):
  print("工作中。。。")
  time.sleep(0.2)
if __name__ == '__main__':
 # print("main主進程{}".format(os.getpid()))
 start= time.time()
 #1 進程的創(chuàng)建與啟動
 # # 1.1創(chuàng)建進程對象,注意dance不能加括號
 # # dance_process = multiprocessing.Process(target=dance)#1.無參數(shù)
 # dance_process=multiprocessing.Process(target=dance,args=("lin",3))#2.以args=元祖方式
 # sing_process = multiprocessing.Process(target=sing,kwargs={"num":3})#3.以kwargs={}字典方式
 # # 1.2啟動進程
 # dance_process.start()
 # sing_process.start()
 #2.默認(rèn)-主進程和子進程是分開的,主進程只要1s就可以完成,子進程要2s,主進程會等所有子進程執(zhí)行完,再退出
 # 2.1子守護主進程,當(dāng)主一但完成,子就斷開(如qq一關(guān)閉,所有聊天窗口就沒了).daemon=True
 work_process = multiprocessing.Process(target=work,daemon=True)
 work_process.start()
 time.sleep(1)
 print("主進程完成了!")#主進程和子進程是分開的,主進程只要1s就可以完成,子進程要2s,主進程會等所有子進程執(zhí)行完,再退出
 print("main主進程花費時長:",time.time()-start)
 #

多線程


重點

1.創(chuàng)建

2.守護線程

3.線程安全問題(多人搶票,會搶到同一張)

import time
import os
import threading
def dance(num):
 for i in range(num):
  print("進程編號:{},線程編號:{}————跳舞。。。".format(os.getpid(),threading.current_thread()))
  time.sleep(1)
def sing(count):
 for i in range(count):
  print("進程編號:{},線程編號:{}----唱歌。。。".format(os.getpid(),threading.current_thread()))
  time.sleep(1)
def task():
 time.sleep(1)
 thread=threading.current_thread()
 print(thread)
if __name__ == '__main__':
 # start=time.time()
 # # sing_thread =threading.Thread(target=dance,args=(3,),daemon=True)#設(shè)置成守護主線程
 # sing_thread = threading.Thread(target=dance, args=(3,))
 # dance_thread = threading.Thread(target=sing,kwargs={"count":3})
 #
 # sing_thread.start()
 # dance_thread.start()
 #
 # time.sleep(1)
 # print("進程編號:{}主線程結(jié)束...用時{}".format(os.getpid(),(time.time()-start)))
 for i in range(10):#多線程之間執(zhí)行是無序的,由cpu調(diào)度
  sub_thread = threading.Thread(target=task)
  sub_thread.start()

線程安全

由于線程直接是無序進行的,且他們共享同一個進程的全部資源,所以會產(chǎn)生線程安全問題(比如多人在線搶票,買到同一張)



#下面代碼在沒有l(wèi)ock鎖時,會賣出0票,加上lock就正常

import threading
import time
lock =threading.Lock()
class Sum_tickets:
 def __init__(self,tickets):
  self.tickets=tickets
def window(sum_tickets):
 while True:
  with lock:
if sum_tickets.tickets>0:
 time.sleep(0.2)
 print(threading.current_thread().name,"取票{}".format(sum_tickets.tickets))
 sum_tickets.tickets-=1
else:
 break
if __name__ == '__main__':
 sum_tickets=Sum_tickets(10)
 sub_thread1 = threading.Thread(name="窗口1",target=window,args=(sum_tickets,))
 sub_thread2 = threading.Thread(name="窗口2",target=window,args=(sum_tickets,))
 sub_thread1.start()
 sub_thread2.start()

高并發(fā)拷貝(多進程,多線程)

import os
import multiprocessing
import threading
import time
def copy_file(file_name,source_dir,dest_dir):
 source_path = source_dir+"/"+file_name
 dest_path =dest_dir+"/"+file_name
 print("當(dāng)前進程為:{}".format(os.getpid()))
 with open(source_path,"rb") as source_file:
  with open(dest_path,"wb") as dest_file:
while True:
 data=source_file.read(1024)
 if data:
  dest_file.write(data)
 else:
  break
 pass
if __name__ == '__main__':
 source_dir=r'C:\Users\Administrator\Desktop\注意力'
 dest_dir=r'C:\Users\Administrator\Desktop\test'
 start = time.time()
 try:
  os.mkdir(dest_dir)
 except:
  print("目標(biāo)文件已存在")
 file_list =os.listdir(source_dir)
 count=0
 #1多進程
 for file_name in file_list:
  count+=1
  print(count)
  sub_processor=multiprocessing.Process(target=copy_file,
 args=(file_name,source_dir,dest_dir))
  sub_processor.start()
  # time.sleep(20)
 print(time.time()-start)
#這里有主進程和子進程,通過打印可以看出,主進程在創(chuàng)建1,2,3,4,,,21過程中,子進程已有的開始執(zhí)行,也就是說,每個進程是互不影響的
# 9
# 10
# 11
# 12
# 13
# 當(dāng)前進程為:2936(當(dāng)主進程創(chuàng)建第13個時,此時,第一個子進程開始工作)
# 14
# 當(dāng)前進程為:10120
# 當(dāng)前進程為:10440
# 15
# 當(dāng)前進程為:9508
 # 2多線程
 # for file_name in file_list:
 #  count += 1
 #  print(count)
 #  sub_thread = threading.Thread(target=copy_file,
 #  args=(file_name, source_dir, dest_dir))
 #  sub_thread.start()
 #  # time.sleep(20)
 # print(time.time() - start)

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注本站的更多內(nèi)容!

香港快速服務(wù)器

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部