python 은 자신의 비동기 IO 등 비동기 작업 을 실현 합 니 다.

3085 단어 python
협정
먼저 료 설 봉 선생님 사이트 의 이 부분 을 인용 하여 협 정 이 라 고도 부 르 고 마이크로 스 레 드, 섬유 과정 이 라 고도 부른다.영어 이름 Corontine.협 정의 개념 은 일찍부터 제기 되 었 으 나 최근 몇 년 에 야 일부 언어 (예 를 들 어 Lua) 에서 광범 위 하 게 응용 되 었 다.서브루틴 또는 함수 라 고 부 릅 니 다. 모든 언어 에서 등급 호출 입 니 다. 예 를 들 어 A 호출 B, B 는 실행 과정 에서 C, C 실행 이 끝나 고 돌아 갑 니 다. B 실행 이 끝나 고 돌아 갑 니 다. 마지막 으로 A 실행 이 끝 났 습 니 다.그래서 서브루틴 호출 은 스 택 을 통 해 이 루어 집 니 다. 하나의 스 레 드 는 하위 프로그램 을 실행 하 는 것 입 니 다.서브루틴 호출 은 항상 하나의 입구 이 고 한 번 에 되 돌아 오 며 호출 순 서 는 명확 합 니 다.협 정의 호출 은 서브루틴 과 다르다.협 정 도 서브루틴 으로 보이 지만 실행 과정 에서 서브루틴 내부 에서 중단 되 고 다른 서브루틴 을 실행 하 며 적당 한 시기 에 되 돌아 와 서 실행 할 수 있 습 니 다.한 하위 프로그램 에서 중단 되 고 다른 하위 프로그램 을 실행 하 십시오. 함수 호출 이 아니 라 CPU 의 중단 과 유사 합 니 다.예 를 들 어 서브루틴 A, B:
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432090171191d05dae6e129940518d1d6cf6eeaaa969000
구체 적 실현
료 선생님 의 소 개 를 본 후에 sleep 함수 로 비동기 과정 을 실현 할 수 있 습 니 다. 그러면 문제 가 생 겼 습 니 다. 만약 에 자신의 비동기 작업 을 실현 해 야 한다 면 어떻게 실현 해 야 합 니까? 인터넷 에서 비동기 io 에 관 한 예 를 많이 찾 았 습 니 다. 90% 는 몇 가지 예 로 서로 인용 되 었 고 결국은 stackoverflow 에서 사용 가능 한 방법 을 찾 았 습 니 다.다음은 예제 코드 를 드 리 겠 습 니 다.
import asyncio
import time

def ret(a):
    time.sleep(3)
    return a

async def get_text(index_url):
    try:
        print(index_url,",","1")
        loop = asyncio.get_event_loop()
        #     
        resp = await loop.run_in_executor(None, ret, index_url)
        print(index_url,",","2","-",resp)
    except Exception as err:
        #       
        print(err)
        traceback.print_exc()
        return None
    return resp

tasks = []
for i in range(0, 3):
    tasks.append(get_text(i))
#   EventLoop:
loop = asyncio.get_event_loop()
#   coroutine
loop.run_until_complete(asyncio.wait(tasks))
loop.close()

주요 부분 은 resp = await loop. runin_executor (None, ret, index url) 줄 은 메시지 순환 에 필요 한 함 수 를 지정 할 수 있 습 니 다. 예 를 들 어 파충류 의 경우 이 ret 함 수 는 requests. get 으로 바 꿀 수 있 습 니 다. 다음은 실행 결과 입 니 다.
1 , 1 2 , 1 0 , 1 1 , 2 - 1 2 , 2 - 2 0 , 2 - 0

좋은 웹페이지 즐겨찾기