簡體   English   中英

異步運行事件循環,直到在 Python 中滿足條件

[英]Async run event loop until condition is met in Python

我是 Async 的新手,我想創建一個腳本,每半秒執行一次請求以檢查網站是否可用。 因此,即使網站響應時間像“4s”,它也會每 0.5 秒執行一次請求。 一旦其中一個請求收到“200”狀態代碼,事件循環就會中斷。

URL = "https://stackoverflow.com"


async def load(session, url):
    async with session.get(url) as response:
        return await response.status == 200

async def create_session():
    complete = False
    while not complete:
        async with aiohttp.ClientSession() as session:
            task = await asyncio.create_task(load(session, URL))
            if task:
               break
            await asyncio.sleep(0.5)



if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(create_session())

現在我得到了這樣的東西,這顯然是行不通的。

我能夠使用asyncio.Event()創建所需的程序。

import asyncio
import aiohttp


url = "https://www.somesite.com"


async def load(session, url, flag):
     async with session.get(url) as response:
         if await response.status == 200: #Check if the site is available.
             flag.set() # Flag is set


async def create_session():
    flag = asyncio.Event()
    async with aiohttp.ClientSession() as session: # Create aiohttp Session
        while 1:
            asyncio.create_task(load(session, url, flag))
            await asyncio.sleep(0.5) # Wait 0.5 s between the requests
            if flag.is_set():# If flag is set then break the loop
                break


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(create_session())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM