協(xié)程段多,又稱為線程足绅,
線程是一個python個中另外一中實現(xiàn)多任務(wù)返方式淳梦,在一個線程中的某個函數(shù)可以理解任何地方保存當(dāng)前函數(shù)中的臨時變量的信息揖赴,然后再到另一個函數(shù)中執(zhí)行
協(xié)程和線程差異
在多個處理器的情況下巫财,從概念上多線程同時運行多個線程:而協(xié)同程序是同過協(xié)作來完成的
在任一指定時刻只有一個協(xié)同程序在運行秽荞,并且這個正在運行的協(xié)同程序只在必要時才會被掛起
簡單實現(xiàn)協(xié)程
from gevent import monkey#導(dǎo)入補丁模塊
monkey.patch_all() #創(chuàng)建補丁
import gevent
import request
from queue import Queue
import time
#明確url
base_url='https://hr.tencent.com/position.php?start=%d'#騰訊
def get_page(q):
while not q.empty()#判斷對象不為空時
url = q.get#獲取隊列中的一個
response=requests.get(url,headers={'User-Agent':'lalala'})#發(fā)送請求
print(reponse.url)
print(time.ctime())#當(dāng)前時間
g_list=[]#列表
q= Queue()#隊列創(chuàng)建
#創(chuàng)建任務(wù)
for i in range(0,3800+1,10):
fullurl = base_url/%#將內(nèi)容插入鏈家
q.put(fullurl)
#多少個基層
for i in range(100);
g = genent.spawn(get_page,q)#創(chuàng)建協(xié)程
g_list.append(g)#將協(xié)程對象添加到列表中
# for i in g_list:#遍歷狀態(tài)
# i.join()#等待當(dāng)前協(xié)程執(zhí)行完畢顷编,在繼續(xù)執(zhí)行
gevent.joinall(g_list)#等待所有協(xié)程執(zhí)行完畢
print(time.ctime())#結(jié)束時間
greenlet
為了更好使用協(xié)程來完成多任務(wù)霎俩,python中的greenlet模塊對其封裝,從而使得切換任務(wù)變的更加簡單
greenlet是一個python的協(xié)程管理仁堪、切換模塊哮洽。通過greenlet,你可以顯式地在不同的任務(wù)之間切換弦聂。
gevent.spawn啟動的所有協(xié)程鸟辅,都是運行在同一個線程之中,所以協(xié)程不能跨線程同步數(shù)據(jù)莺葫。
gevent.queue.Queue 是協(xié)程安全的匪凉。
python程序?qū)崿F(xiàn)的一種單線程下的多任務(wù)執(zhí)行調(diào)度器,簡單來說在一個線程里徙融,先后執(zhí)行AB兩個任務(wù)洒缀,但是當(dāng)A遇到耗時操作(網(wǎng)絡(luò)等待、文件讀寫等)欺冀,這個時候gevent會讓A繼續(xù)執(zhí)行树绩,但是同時也會開始執(zhí)行B任務(wù),如果B在遇到耗時操作同時A又執(zhí)行完了耗時操作隐轩,gevent又繼續(xù)執(zhí)行A饺饭。
imort gevent
def test(time)
print(1)
gevent.sleep(time)
print(2)
def test(time):
print(3)
gevent.sleep(time)
print(4)
if __name == 'main'
gevent.joinall9[
gevent.spawn(test,2),
gevent.spawn(test,3)
])
其中g(shù)event.sleep()是gevent自帶的延時,當(dāng)gevent遇到這個延時時會自動切換职车,這里用gevent.sleep()代替一些耗時操作
2(進程)
進程是系統(tǒng)分配和調(diào)度資源的基本單位瘫俊,線程是cpu調(diào)度和分派的基本單位
線程和進程在使用上各有優(yōu)缺點:線程執(zhí)行開銷小,但不利于資源的管理和保護悴灵;而進程正相反扛芽。
在一個進程內(nèi)的所有線程共享全局變量,很方便在多個線程間共享數(shù)據(jù)
:一個執(zhí)行中程序的實例积瞒。系統(tǒng)中的每個程序都運行在某個進程的上下文中
進程是系統(tǒng)資源分配的最小單位
3.線程
在一個進程內(nèi)的所有線程共享全局變量川尖,很方便在多個線程間共享數(shù)據(jù)。
并行:指的是任務(wù)數(shù)小于等于cpu核數(shù)茫孔,即任務(wù)真的是一起執(zhí)行的
線程是操作系統(tǒng)能夠進行運算調(diào)度的最小單位叮喳。
并發(fā)
1.并發(fā)設(shè)計 2.并發(fā)執(zhí)行
使多個操作可以在重疊的時間段內(nèi)進行
這里的重點在于重疊的時間內(nèi)
在時間1s秒內(nèi), 具有IO操作的task1和task2都完成,這就可以說是并發(fā)執(zhí)行缰贝。所以呢馍悟,單線程也是可以做到并發(fā)運行的。
取決于設(shè)計剩晴,也取決于部署方式
協(xié)程 線程 進程
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門承粤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人闯团,你說我怎么就攤上這事辛臊。” “怎么了房交?”我有些...
- 文/不壞的土叔 我叫張陵彻舰,是天一觀的道長。 經(jīng)常有香客問我候味,道長刃唤,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任白群,我火速辦了婚禮尚胞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘帜慢。我一直安慰自己笼裳,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布粱玲。 她就那樣靜靜地躺著躬柬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抽减。 梳的紋絲不亂的頭發(fā)上允青,一...
- 文/蒼蘭香墨 我猛地睜開眼淹办,長吁一口氣:“原來是場噩夢啊……” “哼眉枕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布玷室,位于F島的核電站,受9級特大地震影響笤受,放射性物質(zhì)發(fā)生泄漏穷缤。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一感论、第九天 我趴在偏房一處隱蔽的房頂上張望绅项。 院中可真熱鬧,春花似錦比肄、人聲如沸快耿。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽掀亥。三九已至,卻和暖如春妥色,著一層夾襖步出監(jiān)牢的瞬間搪花,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 一檀蹋、進程 操作系統(tǒng)中最核心的概念是進程松申,分布式系統(tǒng)中最重要的問題是進程間通信。進程是“程序執(zhí)行的一個實例” 续扔,擔(dān)當(dāng)...
- 導(dǎo)讀 要理解進程與線程堡赔,首先得了解并發(fā)與并行识脆。 并發(fā)與并行 并發(fā)單核CPU時間分片,多個程序切換執(zhí)行善已,這就是并發(fā)灼捂。...
- 當(dāng)單任務(wù)不能滿足工作的需要艘包,只是需要使用多任務(wù)的猛,多任務(wù)分為多進程,多線程想虎,多協(xié)程 先有進程卦尊,進程創(chuàng)建線程,線程依附...
- 進程,線程你雌,協(xié)程器联,我們只有知道他們是怎么來的二汛,才能知道他們是怎么沒的! 進程的創(chuàng)建 通常使用fork就能創(chuàng)建一個子...
- 孫小猛~河北惠友集團 【日精進打卡第115天】 【知~學(xué)習(xí)】 《六項精進》3遍 共345遍 《大學(xué)》3遍 共345...