Python gevent 구현 메커니즘

巴扎黑
풀어 주다: 2016-12-09 14:38:40
원래의
1324명이 탐색했습니다.

앞서 살펴본 그린렛은 코루틴의 기본 기능만을 제공하며 가장 작은 실행 단위입니다. 하지만 이를 사용하려면 어떤 그린렛이 언제 실행되어야 하는지 스케줄링하는 스케줄러를 제공해야 합니다. gevent 구현을 보면 현재 안정 버전은 libev.libevent에 대한 대안을 사용합니다. libev는 많은 이벤트 유형을 지원하지만 가장 일반적으로 사용되는 유형은 io 및 타이머 유형입니다. 시스템에서 제공하는 호출(Linux에서는 epoll), 타이머 유형은 최소 힙을 유지하여 구현됩니다.
다음 코드를 보세요:

Python 코드

import gevent  
from gevent import monkey  
monkey.patch_all()  
  
def download():  
    import urllib2  
    urllib2.urlopen('http://www.google.com/').read()  
  
c = gevent.spawn(download)  
gevent.joinall([c])
로그인 후 복사

spawn을 통한 gevent 그린렛의 실행 기능은 다운로드입니다. 이 그린렛을 시작하려면 libev가 이벤트 루프를 실행할 때마다 이 그린렛을 추가합니다. 실행 후 준비 콜백의 함수가 호출됩니다. 이렇게 하면 생성된 각 greenlet이 실행될 수 있습니다.
이 greenlet이 실행될 때. io 작업(socket.[send|recv ])이 포함되므로 gevent는 해당 작업이 호출되면 fd에 해당하는 watcher가 생성되어 libev의 이벤트 목록에 추가됩니다.
관련 읽기 및 쓰기 이벤트가 발생하면 해당 콜백이 greenlet의 스위치를 호출하여 코루틴을 전환합니다.
위 방법을 통해 greenlet은 스케줄러의 목적을 달성합니다. >


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿