python 에서 Task 패키지 협회 의 지식 점 총화

설명 하 다.
1.Task 는 Future 의 하위 클래스 입 니 다.Task 는 협 정 된 패키지 입 니 다.우 리 는 여러 개의 Task 를 순환 스케줄 링 목록 에 놓 고 스케줄 링 이 실 행 될 때 까지 기 다 립 니 다.
2.Task 대상 은 퀘 스 트 와 상 태 를 추적 할 수 있 습 니 다.Future(Task 는 Futrue 의 하위 클래스)는 비동기 프로 그래 밍 에서 최종 결 과 를 처리 합 니 다(Task 류 는 상태 처리 기능 도 가지 고 있 습 니 다).
3.협 정 을 Task 로 밀봉 하고 한 대열 에 가입 하여 호출 을 기다 리 고 있 습 니 다.Task 를 만 들 때 실행 하지 않 고 await 를 만나면 실행 합 니 다.
실례

import asyncio
 
async def func():
print(1)
await asyncio.sleep(2)
print(2)
return "   "
 
 
async def main():
print("main  ")
 
#     ,      Task                 ,         (       )。
#    
task_list = [
asyncio.create_task(func(), name="n1"),
asyncio.create_task(func(), name="n2")
]
 
print("main  ")
 
#         IO   ,            。
#    await           ,             done
#      timeout ,            ,           done ,      pending 。
done, pending = await asyncio.wait(task_list, timeout=None)
print(done, pending)
 
 
asyncio.run(main())
지식 포인트 확장:
Task 개념 및 용법
  • Task 는 python 에서 사건 순환 과 상호작용 을 하 는 주요 한 방식 이다.
  • Task 를 만 드 는 것 은 협 정 을 Task 인 스 턴 스 로 밀봉 하고 협 정의 운행/완성 상 태 를 추적 하여 미래 에 협 정 된 결 과 를 얻 는 데 사용 한 다 는 뜻 이다.
  • Task 핵심 역할:이벤트 순환 에 여러 개의 병행 작업 을 추가 합 니 다.
  • 구체 적 으로 는 asyncio.create 를 통 해task()는 Task 를 만 들 고 협 정 대상 을 가입 시 킬 때 이벤트 순환 에서 스케줄 이 실 행 될 때 까지 기 다 립 니 다.
    메모:Python 3.7 이후 버 전 지원 asyncio.createtask(),이전 문법 은 loop.createtask(),개발 과정 에서 코드 작성 법 이 서로 다른 버 전의 python 에 대한 호환성 에 주의해 야 합 니 다.
  • 협의 가 Task 로 봉 인 된 후에 바로 시작 되 지 않 고 특정한 코드 await 라 는 Task 가 실 행 될 때 만 실 행 됩 니 다
  • 여러 Task 가 task 에 추가 되면list 를 추가 할 때 Task 를 추가 하 는 과정 에서 Task 는 실행 되 지 않 습 니 다.await asyncio.wait()또는 await asyncio.gather()로 Task 대상 을 이벤트 순환 에 추가 하여 비동기 로 실행 해 야 합 니 다.
    4.567917.일반적으로 개발 에서 자주 사용 하 는 문법 은 다음 과 같다.
    --task 먼저 만 들 기목록 빈 목록;
    --그리고 asyncio.createtask()작업 만 들 기;
    --Task 대상 을 task 에 추가list;
    --마지막 으로 await asyncio.wait 또는 await asyncio.gather 를 사용 하여 작업 대상 을 이벤트 순환 에 추가 하여 비동기 로 실행 합 니 다.
    메모:작업 대상 을 만 들 때 asyncio.create 를 사용 할 수 있 습 니 다.task()외 에 도 최저 등급 의 loop.create 를 사용 할 수 있 습 니 다.task()또는 asyncio.ensurefuture(),그들 은 모두 Task 대상 을 만 드 는 데 사용 할 수 있 습 니 다.그 중에서 ensurefuture 관련 내용 은 다음 에 같이 말씀 드 리 겠 습 니 다.
    Task 용법 코드 예제:
    
    import asyncio
    import arrow
    
    
    def current_time():
        '''
              
        :return:
        '''
        cur_time = arrow.now().to('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss')
        return cur_time
    
    
    async def func(sleep_time):
        func_name_suffix = sleep_time        #    sleep_time(   I/O     )       ,       
        print(f"[{current_time()}]        {func.__name__}-{func_name_suffix}")
        await asyncio.sleep(sleep_time)
        print(f"[{current_time()}]    {func.__name__}-{func_name_suffix}     ")
        return f"【[{current_time()}]      {func.__name__}-{func_name_suffix}     】"
    
    
    async def run():
        task_list = []
        for i in range(5):
            task = asyncio.create_task(async_func(i))
            task_list.append(task)
    
        done, pending = await asyncio.wait(task_list, timeout=None)
        for done_task in done:
            print((f"[{current_time()}]        {done_task.result()}"))
    
    def main():
        loop = asyncio.get_event_loop()
        loop.run_until_complete(run())
    
    
    if __name__ == '__main__':
        main()
    python 에서 Task 패 키 징 협 정 에 관 한 지식 을 정리 한 이 글 은 여기까지 입 니 다.더 많은 관련 python 에서 Task 패 키 징 협 정 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기