對Python協程之非同步同步的區別詳解

2022-10-06 04:36:10 字數 2151 閱讀 6736

一下**通過協程、多執行緒、多程序的方式,執行**展示非同步與同步的區別。

import gevent

import threading

import multiprocessing

# 這裡展示同步和非同步的效能區別,可以看到非同步直接同時執行並完成,

# 而同步,需要等待第乙個完成後再次執行下乙個,是有順序的執行,而非同步不需要

import time

def task(pid):

gevent.sleep(0.5)

print('task %s done' % pid)

def task2(pid):

time.sleep(0.5)

print('task %s done'%pid)

def synchronous():

for i in range(1, 10):

task(i)

def asynchronous():

threads = [gevent.spawn(task, i) for i in range(1,10)]

gevent.joinall(threads)

def thread_chronous():

t_list =

for i in range(1,10):

t = threading.thread(target=task2,args=(i,))

t.start()

t_list.append(t)

for j in t_list:

j.join()

def multi_chronous():

t_list =

for i in range(1, 10):

t = multiprocessing.process(target=task2, args=(i,))

t.start()

t_list.append(t)thmqeu

for j in t_list:

j.join()

# 同步執行

print('synchronous:')

synchronous()

# 開啟協程非同步執行 自動切換函式

print('asynchronous:')

asynchronous()

# 開啟執行緒非同步執行

print('threading')

thread_chronous()

# 開啟程序的非同步執行

if __name__ == '__main__':

print('multiprocess')

multi_chronous()

關於非同步 同步的一些理解:

同步和非同步的區別就在於是否等待io執行的結果。好比你去麥當勞點餐,你說「來個漢堡」,服務員告訴你,對不起,漢堡要現做,需要等5分鐘,於是你站在收銀台前面等了5分鐘,拿到漢堡再去逛商場,這是同步io。

你說「來個漢堡」,服務員告訴你,漢堡需要等5分鐘,你可以先去逛商場,等做好了,我們再通知你,這樣你可以立刻去幹別的事情(逛商場),這是非同步io。

老張愛喝茶,廢話不說,煮開水。出場人物:老張,水壺兩把(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺程式設計客棧)。

1 老張把水壺放到火上,立等水開。(同步阻塞)老張覺得自己有點傻

2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。(同步非阻塞)老張還是覺得自己有點傻,於是變高階了,買了把會響笛的那種水壺。水開之後,能大聲發出嘀~~~~的噪音。

3 老張把響水壺放到火上,立等水開。(非同步阻塞)老張覺得這樣傻等意義不大

4 老張把響水壺放到火上,去客廳看電視,水壺響之前不再去看它了,響了再去拿壺。(非同步非阻塞)老張覺得自己聰明了。所謂同步非同步,只是對於水壺而言。普通水壺,同步;響水壺,非同步。雖然都能幹活,但響水壺可以在自己完工之後,提示老張水開了。這是普通水壺所不能及的。同步只能讓呼叫者去輪詢自己(情況2中),造成老張效率的低下。所謂阻塞非阻塞,僅僅對於老張而言。立等的老張,阻塞;看電視的老張,非阻塞。情況1和程式設計客棧情況3中老張就是阻塞的,媳婦喊www.cppcns.com他都不知道。雖然3中響水壺是非同步的,可對於立等的老張沒有太大的意義。所以一般非同步是配合非阻塞使用的,這樣才能發揮非同步的效用。

本文標題: 對python協程之非同步同步的區別詳解

本文位址: /jiaoben/python/252533.html

Python協程之非同步同步區別

一下 通過協程 多執行緒 多程序的方式,執行 展示非同步與同步的區別。import gevent import threading import multiprocessing 這裡展示同步和非同步的效能區別,可以看到非同步直接同時執行並完成,而同步,需要等待第乙個完成後再次執行下乙個,是有順序的執...

同步,非同步,協程的概念

例子 dns伺服器,mysql伺服器,http伺服器等等 上面的非同步是將資料全部傳送,伺服器接收資料後等待傳送完,然後一起處理 然後伺服器一次性傳送客戶端。非同步比同步效能高 同步比非同步流程快 所以基於上面的協程就為了解決同步的效能問題。效能的比較 同步 協程 非同步 原理 在傳送地方加上yie...

python協程與非同步協程

在前面幾個部落格中我們一一對應解決了消費者消費的速度跟不上生產者,浪費我們大量的時間去等待的問題,在這裡,針對業務邏輯比較耗時間的問題,我們還有除了多程序之外更優的解決方式,那就是協程和非同步協程。在引入這個概念之前我們先看 看這個圖 從這個我們可以看出來,假如來了9個任務,即使我們開了多程序,在業...