python 關於非同步的函式如何寫?

2021-10-01 08:45:05 字數 2349 閱讀 6705

1、說在前面的話

目前我知道的庫:trio   asyncio    這兩個庫 下面分別對這兩個庫的使方法進行舉例

2、asyncio(使用方法很簡單)

客戶端:

import time

from pynng import pub0, sub0, timeout

import asyncio

address = 'tcp:'

async def subclientasyn():

sub1 = sub0(dial=address)

sub1.subscribe(b'')

i = 1

while true:

i = i + 1

msg= await sub1.arecv()

print('收到的內容',msg)

def subclient():

sub1 = sub0(dial=address)

sub1.subscribe(b'')

i = 1

while true:

msg=sub1.recv()

print('收到的內容',msg)

if __name__=='__main__':

import trio

# subclient()

# trio.run(subclientasyn)

tasks = [asyncio.ensure_future(subclientasyn())]

loop = asyncio.get_event_loop()

loop.run_until_complete(asyncio.wait(tasks))

loop.close()

伺服器:

import time

from pynng import pub0, sub0, timeout

import asyncio

address = 'tcp:'

def pubserver():

pub=pub0(listen=address)

i = 1

while true:

i = i + 1

time.sleep(1)

print('we are sending-----')

pub.send(b'asyn masg')

async def pubserverasyn():

pub=pub0(listen=address)

i = 1

while true:

i = i + 1

# await trio.sleep(1)

await asyncio.sleep(1)

print('we are sending-----')

await pub.asend(str(i).encode())

async def subclient():

sub1 = sub0(dial=address, recv_timeout=100)

sub1.subscribe(b'')

i = 1

while true:

i = i + 1

msg= await sub1.arecv()

print('收到的內容',msg)

if __name__=='__main__':

import trio

# pubserver()

tasks = [asyncio.ensure_future(pubserverasyn())]

loop = asyncio.get_event_loop()

loop.run_until_complete(asyncio.wait(tasks))

loop.close()

# trio.run(pubserverasyn)

以上是我使用nng 這個通訊庫使用的

涉及到具體python的中的非同步的地方:

async ----------》await   函式中要使用這兩個

對於執行的地方:

tasks = [asyncio.ensure_future(pubserverasyn())]

loop = asyncio.get_event_loop()

loop.run_until_complete(asyncio.wait(tasks))

loop.close()

2、trio(很簡單)

只需要最後執行的時候,trio.run(要非同步執行的函式)

其中關於sleep   trio.sleep    asyncio.sleep

各自是不同的,必須要用對應的庫才行。

python如何實現非同步呼叫函式執行

在實現非同步呼叫之前我們先進行什麼是同步呼叫和非同步呼叫 分析一下,下面的例子 定義了乙個裝飾器 async 和 a b 兩個function 函式 a 裡面sleep 10s 然後列印 a function 字串 b 裡面直接列印 b function 字串 我們順序呼叫兩個功能 a b 由於函式...

關於python協程與非同步舉例

寫了幾個介面,也就接觸到了python的非同步。python的協程使用非同步實現的 說法不知道準不準確 所以直接使用協程來做,看的很多例子也是這麼幹的 先看 import json import tornado import tornado.web from tornado import gen f...

關於python的open 函式

大家都知道,python的open 函式可以用來開啟txt,但是你們知不知道,open函式可以開啟所有的檔案型別嗎?open函式語法 open 檔名 模式 不過這裡有一點要注意的是 open函式的w模式,是會覆蓋原來的檔案,重新編寫 有些檔案,比如docx,你編寫了再用word開啟檔案是會損壞的 但...