Das Greenlet, das ich mir zuvor angesehen habe, bietet nur die Grundfunktion von Coroutine und ist die kleinste Ausführungseinheit. Wenn Sie es jedoch verwenden möchten, müssen Sie einen Zeitplaner bereitstellen, um zu planen, welche Greenlets wann ausgeführt werden sollen Schauen Sie sich die Implementierung von gevent an. Die aktuelle stabile Version verwendet eine Alternative zu libev.libev. Sie unterstützt viele Ereignistypen, aber die am häufigsten verwendeten sind io- und Timer-Typen Vom System bereitgestellte Aufrufe. Der Timer-Typ wird durch die Aufrechterhaltung eines minimalen Heaps implementiert.
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])
Wenn verwandte Lese- und Schreibereignisse auftreten, wird der entsprechende Rückruf den Schalter des Greenlets aufrufen, um die Coroutine zu wechseln.