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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.