中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

東莞公司網(wǎng)站建設(shè)公司河南網(wǎng)站顧問

東莞公司網(wǎng)站建設(shè)公司,河南網(wǎng)站顧問,鄉(xiāng)鎮(zhèn)醫(yī)院網(wǎng)站建設(shè),網(wǎng)站模板文件不存在目錄 一、知識點(diǎn)二、多線程語法GIL單線程多線程單線程多線程 最后的驚喜 一、知識點(diǎn) 線程(Thread)也叫輕量級進(jìn)程,是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位,它被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)作單位。線程自己不擁有…

目錄

  • 一、知識點(diǎn)
    • 二、多線程語法
      • GIL
        • 單線程
        • 多線程
          • 單線程
          • 多線程
      • 最后的驚喜

一、知識點(diǎn)

線程(Thread)也叫輕量級進(jìn)程,是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位,它被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)作單位。線程自己不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源,但它可與同屬的一個(gè)進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源。一個(gè)線程可以創(chuàng)建和撤銷另一個(gè)線程,同一進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行。

二、多線程語法

在Python中實(shí)現(xiàn)多線程編程需要用到的就是threading模塊中的Thread類,我們來看看最簡單的語法,我們首先來一個(gè)簡單的函數(shù)。

def task(num):count = 0for i in range(num):count += 1print(count)nums = [100, 1000, 10000]
for num in nums:task(num)# 100
#1000
#10000

我們用三個(gè)子線程分別計(jì)算。

import threadingdef task(num):count = 0for i in range(num):count += 1print(count)nums = [100, 1000, 10000]
for num in nums:t = threading.Thread(target=task, args=(num,))t.start()

利用Thread創(chuàng)建線程,target參數(shù)接收函數(shù)名,args參數(shù)接收函數(shù)的參數(shù),start方法啟動線程。

這里還需要講解一下join方法,他的作用是讓主線程等待,直到該子線程結(jié)束。我們來看看加該方法和不加該方法,最終的結(jié)果是怎么樣的。

import threadingdef task():num = 0for i in range(10000000):num += 1print(num)t = threading.Thread(target=task)
t.start()
print('end')# end
# 10000000import threadingdef task():num = 0for i in range(10000000):num += 1print(num)t = threading.Thread(target=task)
t.start()
t.join()
print('end')# 10000000
# end

GIL

在說概念之前,我們還是以上面的代碼為例,分別求單線程和多線程代碼運(yùn)行的時(shí)間。

單線程

import timedef task(num):count = 0for i in range(num):count += 1print(count)nums = [1000000, 100000000, 1000000000]
start = time.time()
for num in nums:task(num)
end = time.time()
print(end - start)# 50.44705629348755

多線程

import threading
import timedef task(num):count = 0for i in range(num):count += 1print(count)nums = [1000000, 100000000, 1000000000]
ts = []
start = time.time()for num in nums:t = threading.Thread(target=task, args=(num,))t.start()ts.append(t)for t in ts:t.join()end = time.time()
print(end - start)# 55.022353172302246

你會發(fā)現(xiàn)多線程比單線程花費(fèi)的時(shí)間還要更多,這是因?yàn)镚IL的原因。

GIL的全稱是Global Interpreter Lock(全局解釋器鎖),Python最初的設(shè)計(jì)理念在于,為了解決多線程之間數(shù)據(jù)完整性和狀態(tài)同步的問題,設(shè)計(jì)為在任意時(shí)刻只能由一個(gè)線程在解釋器中運(yùn)行。因此Python中的多線程是表面上的多線程(同一時(shí)刻只有一個(gè)線程),不是真正的多線程。

但是如果是因?yàn)镚IL的原因,就說多線程無用是不對的,對于IO密集的程序,多線程是要比單線程快的。我們舉一個(gè)簡單的爬蟲案例。

單線程
import timedef task(url):s = url.split('_')[-1]time.sleep(int(s)) #這里模擬請求等待urls = ['url_1', 'url_2', 'url_3']
start = time.time()
for url in urls:task(url)
end = time.time()
print(end - start)# 6.013520002365112
多線程
import threading
import timedef task(url):s = url.split('_')[-1]time.sleep(int(s))ts = []
urls = ['url_1', 'url_2', 'url_3']
start = time.time()for url in urls:t = threading.Thread(target=task, args=(url,))t.start()ts.append(t)for t in ts:t.join()end = time.time()
print(end - start)# 3.005527973175049

這時(shí)候我們就能看到多線程的優(yōu)勢了,雖然多線程只是在各線程來回切換,但是可以讓IO堵塞的時(shí)間切換到其他線程做其他的任務(wù),很適合爬蟲或者文件的操作。

最后的驚喜

最后這里有準(zhǔn)備一些Python的學(xué)習(xí)資料需要的自取哈

http://www.risenshineclean.com/news/50466.html

相關(guān)文章:

  • 做網(wǎng)站站主需要什么條件天津提升專業(yè)關(guān)鍵詞排名
  • 上海做征信服務(wù)的公司網(wǎng)站愛網(wǎng)站關(guān)鍵詞查詢工具長尾
  • 企業(yè)門戶網(wǎng)站作用腰椎間盤突出壓迫神經(jīng)腿疼怎么治
  • 怎樣做天貓網(wǎng)站視頻公司網(wǎng)站建設(shè)代理
  • 珠海哪里做網(wǎng)站的網(wǎng)絡(luò)怎么做推廣
  • 桂林 網(wǎng)站 建設(shè)海南網(wǎng)站制作
  • 淄博周村網(wǎng)站建設(shè)公司廣州優(yōu)化公司哪家好
  • 視頻網(wǎng)站做短視頻百度推廣一個(gè)關(guān)鍵詞多少錢
  • wordpress 微博主題 twitter主題seo建站要求
  • 2018網(wǎng)站開發(fā)最流行的語言產(chǎn)品推廣網(wǎng)站哪個(gè)好
  • 杭州政府網(wǎng)站建設(shè)管理seo查詢系統(tǒng)源碼
  • 易語言怎么制作網(wǎng)站網(wǎng)上銷售平臺
  • 鄧州微網(wǎng)站開發(fā)seo標(biāo)題優(yōu)化是什么意思
  • 公司網(wǎng)站設(shè)計(jì)的企業(yè)西安百度網(wǎng)站排名優(yōu)化
  • 中國三大門戶網(wǎng)站是哪三個(gè)開源cms建站系統(tǒng)
  • 關(guān)于配色的網(wǎng)站千鋒教育靠譜嗎
  • 黃岡最專業(yè)的公司網(wǎng)站建設(shè)平臺西安百度seo代理
  • wordpress做一個(gè)視頻網(wǎng)站嗎刷網(wǎng)站排名軟件
  • 在線做網(wǎng)站索引線下營銷推廣方式都有哪些
  • 合肥搭建網(wǎng)站網(wǎng)絡(luò)營銷的基本特征有哪七個(gè)
  • 怎么用joomla做網(wǎng)站新公司怎么做網(wǎng)絡(luò)推廣
  • 自己做網(wǎng)站 做什么好以營銷推廣為主題的方案
  • wordpress 30天唐山seo推廣公司
  • 網(wǎng)站建設(shè)步驟大全石家莊seo推廣
  • 有哪些做網(wǎng)站的品牌天津百度推廣排名優(yōu)化
  • 做網(wǎng)站的費(fèi)用入賬優(yōu)化公司組織架構(gòu)
  • 申請制作網(wǎng)站seo教程百度網(wǎng)盤
  • 百家號和網(wǎng)站同步做凡科建站客服電話
  • 做設(shè)計(jì)找圖有哪些網(wǎng)站有哪些問題能打開各種網(wǎng)站的瀏覽器
  • 做家庭影院的有哪些網(wǎng)站網(wǎng)站優(yōu)化方案范文