精品熟女碰碰人人a久久,多姿,欧美欧美a v日韩中文字幕,日本福利片秋霞国产午夜,欧美成人禁片在线观看

Python 事件驅(qū)動(dòng)編程

事件驅(qū)動(dòng)的編程側(cè)重于事件。最終,程序的流程取決于事件。到目前為止,我們處理順序或并行執(zhí)行模型,但具有事件驅(qū)動(dòng)編程概念的模型稱為異步模型。事件驅(qū)動(dòng)的編程取決于始終偵聽(tīng)新傳入事件的事件循環(huán)。事件驅(qū)動(dòng)編程的工作取決于事件。一旦事件循環(huán),然后事件決定執(zhí)行什么以及以什么順序執(zhí)行。以下流程圖將幫助您了解其工作原理

 

python模塊 - asyncio

asyncio模塊是在python 3.4中添加的,它提供了使用協(xié)同例程編寫(xiě)單線程并發(fā)代碼的基礎(chǔ)結(jié)構(gòu)。以下是asyncio模塊使用的不同概念

事件循環(huán)

事件循環(huán)是處理計(jì)算代碼中的所有事件的功能。它在整個(gè)程序的執(zhí)行過(guò)程中發(fā)揮作用,并跟蹤事件的傳入和執(zhí)行。asyncio模塊允許每個(gè)進(jìn)程使用一個(gè)事件循環(huán)。以下是asyncio模塊提供的一些管理事件循環(huán)的方法

  • loop = get_event_loop() - 此方法將為當(dāng)前上下文提供事件循環(huán)。

  • loop.call_later(time_delay,callback,argument) - 此方法安排在給定的time_delay秒之后調(diào)用的回調(diào)。

  • loop.call_soon(callback,argument) - 此方法安排盡快調(diào)用的回調(diào)。 在call_soon()返回并且控件返回到事件循環(huán)時(shí)調(diào)用回調(diào)。

  • loop.time() - 此方法用于根據(jù)事件循環(huán)的內(nèi)部時(shí)鐘返回當(dāng)前時(shí)間。

  • asyncio.set_event_loop() - 此方法將當(dāng)前上下文的事件循環(huán)設(shè)置為循環(huán)。

  • asyncio.new_event_loop() - 此方法將創(chuàng)建并返回一個(gè)新的事件循環(huán)對(duì)象。

  • loop.run_forever() - 此方法將一直運(yùn)行,直到調(diào)用stop()方法。

以下事件循環(huán)示例通過(guò)使用get_event_loop()方法幫助打印 hello world 。此示例取自python官方文檔。

import asyncio

def hello_world(loop):
   print('hello world')
   loop.stop()

loop = asyncio.get_event_loop()

loop.call_soon(hello_world, loop)

loop.run_forever()
loop.close()

輸出

hello world

期貨

這與concurrent.futures.future類兼容,該類表示尚未完成的計(jì)算。asyncio.futures.future和concurrent.futures.future之間存在以下差異

  • result()和exception()方法不會(huì)使用超時(shí)參數(shù),并在未來(lái)尚未完成時(shí)引發(fā)異常。

  • 用add_done_callback()注冊(cè)的回調(diào)總是通過(guò)事件循環(huán)的call_soon()調(diào)用。

  • asyncio.futures.future類與concurrent.futures包中的wait()和as_completed()函數(shù)不兼容。

以下是一個(gè)示例,可幫助您了解如何使用asyncio.futures.future類。

import asyncio

async def myoperation(future):
   await asyncio.sleep(2)
   future.set_result('future completed')

loop = asyncio.get_event_loop()
future = asyncio.future()
asyncio.ensure_future(myoperation(future))
try:
   loop.run_until_complete(future)
   print(future.result())
finally:
   loop.close()

輸出

future completed

協(xié)同程序

asyncio中的協(xié)同程序的概念類似于線程模塊下的標(biāo)準(zhǔn)thread對(duì)象的概念。這是子程序概念的概括。協(xié)程可以在執(zhí)行期間暫停,以便等待外部處理并從外部處理完成時(shí)停止的點(diǎn)返回。以下兩種方式幫助我們實(shí)現(xiàn)協(xié)同程序

異步def函數(shù)()

這是在asyncio模塊下實(shí)現(xiàn)協(xié)同程序的方法。以下是相同的python腳本

import asyncio

async def myoperation():
   print("first coroutine")

loop = asyncio.get_event_loop()
try:
   loop.run_until_complete(myoperation())

finally:
   loop.close()

輸出

first coroutine

@ asyncio.coroutine裝飾

實(shí)現(xiàn)協(xié)同程序的另一種方法是利用@ asyncio.coroutine裝飾器來(lái)生成生成器。以下是相同的python腳本

import asyncio

@asyncio.coroutine
def myoperation():
   print("first coroutine")

loop = asyncio.get_event_loop()
try:
   loop.run_until_complete(myoperation())

finally:
   loop.close()

輸出

first coroutine

任務(wù)

asyncio模塊的這個(gè)子類負(fù)責(zé)以并行方式在事件循環(huán)中執(zhí)行協(xié)同程序。以下python腳本是并行處理某些任務(wù)的示例。

import asyncio
import time
async def task_ex(n):
   time.sleep(1)
   print("processing {}".format(n))
async def generator_task():
   for i in range(10):
      asyncio.ensure_future(task_ex(i))
   int("tasks completed")
   asyncio.sleep(2)

loop = asyncio.get_event_loop()
loop.run_until_complete(generator_task())
loop.close()

輸出

tasks completed
processing 0
processing 1
processing 2
processing 3
processing 4
processing 5
processing 6
processing 7
processing 8
processing 9

asyncio

asyncio模塊提供用于實(shí)現(xiàn)各種類型通信的傳輸類。這些類不是線程安全的,并且在建立通信信道之后總是與協(xié)議實(shí)例配對(duì)。

以下是從basetransport繼承的不同類型的傳輸 -

  • readtransport - 這是只讀傳輸?shù)慕涌凇?p>

  • writetransport - 這是只寫(xiě)傳輸?shù)慕涌凇?p>

  • datagramtransport - 這是用于發(fā)送數(shù)據(jù)的接口。

  • basesubprocesstransport - 類似于 basetransport 類。

以下是basetransport類的五種不同方法,這些方法隨后在四種傳輸類型中是瞬態(tài)的

  • close() - 關(guān)閉運(yùn)輸。

  • is_closing() - 如果傳輸正在關(guān)閉或已經(jīng)關(guān)閉,則此方法將返回true。傳輸。

  • get_extra_info(name,default = none) - 這將為我們提供有關(guān)傳輸?shù)囊恍╊~外信息。

  • get_protocol() - 此方法將返回當(dāng)前協(xié)議。

協(xié)議

asyncio模塊提供了可以子類化以實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議的基類。這些課程與運(yùn)輸一起使用; 協(xié)議解析傳入的數(shù)據(jù)并請(qǐng)求傳出數(shù)據(jù)的寫(xiě)入,而傳輸負(fù)責(zé)實(shí)際的i / o和緩沖。以下是三類議定書(shū)

  • 協(xié)議 - 這是實(shí)現(xiàn)用于tcp和ssl傳輸?shù)牧鲄f(xié)議的基類。

  • datagramprotocol - 這是用于實(shí)現(xiàn)與udp傳輸一起使用的數(shù)據(jù)報(bào)協(xié)議的基類。

  • subprocessprotocol - 這是用于實(shí)現(xiàn)通過(guò)一組單向管道與子進(jìn)程通信的協(xié)議的基類。

下一節(jié):python 反應(yīng)式編程

相關(guān)文章