欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python在協(xié)程中增加任務(wù)實例操作

 更新時間:2021年02月28日 09:08:07   作者:小妮淺淺  
在本篇文章里小編給大家整理的是一篇關(guān)于python在協(xié)程中增加任務(wù)實例操作內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。

1、添加一個任務(wù)

task2 = visit_url('http://another.com', 3)
asynicio.run(task2)

2、這 2 個程序一共消耗 5s 左右的時間。并沒有發(fā)揮并發(fā)編程的優(yōu)勢

import asyncio
import time
async def visit_url(url, response_time):
  """訪問 url"""
  await asyncio.sleep(response_time)
  return f"訪問{url}, 已得到返回結(jié)果"

async def run_task():
  """收集子任務(wù)"""
  task = visit_url('http://wangzhen.com', 2)
  task_2 = visit_url('http://another', 3)
  await asyncio.run(task)
  await asyncio.run(task_2)
asyncio.run(run_task())
print(f"消耗時間:{time.perf_counter() - start_time}")

3、如果是并發(fā)編程,這個程序只需要消耗 3s,也就是task2的等待時間。

要想使用并發(fā)編程形式,需要把上面的代碼改一下。asyncio.gather 會創(chuàng)建 2 個子任務(wù),當出現(xiàn) await 的時候,程序會在這 2 個子任務(wù)之間進行調(diào)度。

async def run_task():
  """收集子任務(wù)"""
  task = visit_url('http://wangzhen.com', 2)
  task_2 = visit_url('http://another', 3)
  await asynicio.gather(task1, task2)

實例擴展:

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

到此這篇關(guān)于python在協(xié)程中增加任務(wù)實例操作的文章就介紹到這了,更多相關(guān)python在協(xié)程中增加任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 將 CSV 分割成多個文件的示例代碼

    Python 將 CSV 分割成多個文件的示例代碼

    在本文中,我們討論了如何使用 Pandas 庫創(chuàng)建 CSV 文件, 此外,我們還討論了兩種常見的數(shù)據(jù)拆分技術(shù),行式數(shù)據(jù)拆分和列式數(shù)據(jù)拆分,需要的朋友可以參考下
    2023-06-06
  • python中樹與樹的表示知識點總結(jié)

    python中樹與樹的表示知識點總結(jié)

    在本篇文章里小編給大家分享的是關(guān)于python中樹與樹的表示的相關(guān)知識點,需要的讀者們學(xué)習(xí)下吧。
    2019-09-09
  • 詳細探究Python中的字典容器

    詳細探究Python中的字典容器

    這篇文章主要介紹了Python中的字典容器,本文來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • python3 traceback模塊來追蹤和打印異常信息

    python3 traceback模塊來追蹤和打印異常信息

    本文主要介紹了python3 traceback模塊來追蹤和打印異常信息,這個模塊提供了許多函數(shù)來處理異常,并且能夠輸出異常的堆棧信息,感興趣的可以了解一下
    2024-02-02
  • python 爬蟲網(wǎng)頁登陸的簡單實現(xiàn)

    python 爬蟲網(wǎng)頁登陸的簡單實現(xiàn)

    這篇文章主要介紹了python 爬蟲網(wǎng)頁登陸的簡單實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python之wxPython菜單使用詳解

    python之wxPython菜單使用詳解

    這篇文章主要介紹了python中wxPython菜單使用方法,可實現(xiàn)給彈出菜單項添加圖標的功能,在Python程序設(shè)計中非常具有實用價值,需要的朋友可以參考下
    2014-09-09
  • Python實現(xiàn)導(dǎo)彈自動追蹤代碼實例

    Python實現(xiàn)導(dǎo)彈自動追蹤代碼實例

    這篇文章主要介紹了Python實現(xiàn)導(dǎo)彈自動追蹤代碼實例,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-11-11
  • selenium+python環(huán)境配置教程詳解

    selenium+python環(huán)境配置教程詳解

    這篇文章主要介紹了selenium+python環(huán)境配置教程,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • 詳解python 支持向量機(SVM)算法

    詳解python 支持向量機(SVM)算法

    這篇文章主要介紹了python SVM算法的相關(guān)資料,幫助大家更好的利用python進行數(shù)據(jù)分析,感興趣的朋友可以了解下
    2020-09-09
  • Python中使用glob和rmtree刪除目錄子目錄及所有文件的例子

    Python中使用glob和rmtree刪除目錄子目錄及所有文件的例子

    這篇文章主要介紹了python中使用glob和rmtree刪除目錄子目錄及所有文件的例子,需要的朋友可以參考下
    2014-11-11

最新評論