{"name":"py312-greenlet","portdir":"python/py-greenlet","version":"3.3.2","license":"MIT and PSF","platforms":"darwin","epoch":0,"replaced_by":null,"homepage":"https://github.com/python-greenlet/greenlet","description":"Lightweight in-process concurrent programming","long_description":"The \"greenlet\" package is a spin-off of Stackless, a version of CPython that supports micro-threads called \"tasklets\". Tasklets run pseudo-concurrently (typically in a single or a few OS-level threads) and are synchronized with data exchanges on \"channels\". A \"greenlet\", on the other hand, is a still more primitive notion of micro-thread with no implicit scheduling; coroutines, in other words. This is useful when you want to control exactly when your code runs. You can build custom scheduled micro-threads on top of greenlet; however, it seems that greenlets are useful on their own as a way to make advanced control flow structures. For example, we can recreate generators; the difference with Python's own generators is that our generators can call nested functions and the nested functions can yield values too. Additionally, you don't need a \"yield\" keyword. See the example in test_generator.py. Greenlets are provided as a C extension module for the regular unmodified interpreter.","active":true,"categories":["devel","python"],"maintainers":[{"name":"stromnov","github":"stromnov","ports_count":2892}],"variants":["universal"],"dependencies":[{"type":"build","ports":["py312-build","py312-installer","py312-setuptools","py312-wheel","clang-18"]},{"type":"lib","ports":["python312"]}],"depends_on":[{"type":"lib","ports":["py312-eventlet","py312-pytest-twisted","py312-httpbin","py312-sqlalchemy","py312-gevent","py312-neovim"]}]}