国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python協程之動態添加任務的方法

2020-02-16 01:13:59
字體:
來源:轉載
供稿:網友

python協程只能運行在事件循環中,但是一旦事件循環運行,又會阻塞當前任務。所以只能在當前進程中再開一個線程,這個線程的主要任務是運行事件循環,就是event_loop,因為他是一個無限循環,會阻塞當前線程。

放一個自己寫的demo,注釋寫的很詳細。

另外還有一點需要注意,一個事件循環中不能運行另外一個事件循環。

運行結果:

python協程之動態添加任務

import asynciofrom threading import Thread  async def production_task():  i = 0  while True:    # 將consumption這個協程每秒注冊一個到運行在線程中的循環,thread_loop每秒會獲得一個一直打印i的無限循環任務    asyncio.run_coroutine_threadsafe(consumption(i),                     thread_loop) # 注意:run_coroutine_threadsafe 這個方法只能用在運行在線程中的循環事件使用    await asyncio.sleep(1) # 必須加await    i += 1  async def consumption(i):  while True:    print("我是第{}任務".format(i))    await asyncio.sleep(1)  def start_loop(loop):  # 運行事件循環, loop以參數的形式傳遞進來運行  asyncio.set_event_loop(loop)  loop.run_forever()  thread_loop = asyncio.new_event_loop() # 獲取一個事件循環run_loop_thread = Thread(target=start_loop, args=(thread_loop,)) # 將次事件循環運行在一個線程中,防止阻塞當前主線程run_loop_thread.start() # 運行線程,同時協程事件循環也會運行 advocate_loop = asyncio.get_event_loop() # 將生產任務的協程注冊到這個循環中advocate_loop.run_until_complete(production_task()) # 運行次循環

以上這篇python協程之動態添加任務的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜章县| 鹰潭市| 理塘县| 二连浩特市| 收藏| 宁陵县| 洮南市| 海丰县| 金川县| 定远县| 基隆市| 吉安县| 福州市| 上饶县| 镇江市| 安义县| 鄯善县| 达尔| 华宁县| 许昌县| 依兰县| 镶黄旗| 拉孜县| 诏安县| 乌苏市| 射阳县| 郓城县| 开阳县| 湖州市| 睢宁县| 大冶市| 乡城县| 龙门县| 澄江县| 永川市| 湘潭县| 沭阳县| 佛教| 宜昌市| 土默特右旗| 衡水市|