グリーンレットとは何ぞや?

入門Python3曰く、
「通常のスレッドはブロックするが、グリーンレットはブロックしない」

何が言いたいのかいまいちよくわからんのですが、Geventチュートリアルの説明も合わせて読んでみると、要するに、gevent.spawn関数に引き渡した時に、その関数だけでCPUパワーを独占しないような関数のことを言うようだ。

ある関数をグリーンレットにするためには、関数内でgevent.sleep関数を呼べばいいみたいだ。

『入門Python 3』でのグリーンレットの例は、geventモジュールで用意されているgevent.socket.gethostbyname関数を使っているが、おそらくこの関数内でgevent.sleep関数を読んでいるのだろう。


そう思ってgeventモジュールのソースを追ってみたが、複雑すぎてわからなかった。 🙁
まあ、こういうものだということで納得しておこう。

参考文献

入門Python 3 (オライリー)

Pythonプログラミング物語 © 2016 Frontier Theme