真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python中的asyncio庫(kù)-線程同步

今天就跟大家聊聊有關(guān)Python中的asyncio庫(kù)-線程同步,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

我們提供的服務(wù)有:網(wǎng)站制作、做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、禹州ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的禹州網(wǎng)站制作公司

前面的代碼都是異步的,就如sleep,需要用asyncio.sleep而不是阻塞的time.sleep,如果有同步邏輯,怎么利用asyncio實(shí)現(xiàn)并發(fā)呢?答案是用run_in_executor。在一開始我說過開發(fā)者創(chuàng)建 Future 對(duì)象情況很少,主要是用run_in_executor,就是讓同步函數(shù)在一個(gè)執(zhí)行器( executor)里面運(yùn)行。

同步代碼

def a():
    time.sleep(1)
    return 'A'
async def b():
    await asyncio.sleep(1)
    return 'B'
def show_perf(func):
    print('*' * 20)
    start = time.perf_counter()
    asyncio.run(func())
    print(f'{func.__name__} Cost: {time.perf_counter() - start}')
async def c1():
    loop = asyncio.get_running_loop()
    await asyncio.gather(
        loop.run_in_executor(None, a),
        b()
    )
In : show_perf(c1)
********************
c1 Cost: 1.0027242230000866

可以看到用run_into_executor可以把同步函數(shù)邏輯轉(zhuǎn)化成一個(gè)協(xié)程,且實(shí)現(xiàn)了并發(fā)。這里要注意細(xì)節(jié),就是函數(shù)a是普通函數(shù),不能寫成協(xié)程,下面的定義是錯(cuò)誤的,不能實(shí)現(xiàn)并發(fā):

async def a():
    time.sleep(1)
    return 'A'

因?yàn)?a 里面沒有異步代碼,就不要用async def來定義。需要把這種邏輯用loop.run_in_executor封裝到協(xié)程:

async def c():
    loop = asyncio.get_running_loop()
    return await loop.run_in_executor(None, a)

大家理解了吧?

loop.run_in_executor(None, a)這里面第一個(gè)參數(shù)是要傳遞concurrent.futures.Executor實(shí)例的,傳遞None會(huì)選擇默認(rèn)的executor:

In : loop._default_executor
Out: 

當(dāng)然我們還可以用進(jìn)程池,這次換個(gè)常用的文件讀寫例子,并且用:

async def c3():
    loop = asyncio.get_running_loop()
    with concurrent.futures.ProcessPoolExecutor() as e:
        print(await asyncio.gather(
            loop.run_in_executor(e, a),
            b()
        ))
In : show_perf(c3)
********************
['A', 'B']
c3 Cost: 1.0218078890000015

看完上述內(nèi)容,你們對(duì)Python中的asyncio庫(kù)-線程同步有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


網(wǎng)頁(yè)標(biāo)題:Python中的asyncio庫(kù)-線程同步
轉(zhuǎn)載來于:http://weahome.cn/article/pppics.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部