GET /api/v1/ports/py39-greenlet/
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"name": "py39-greenlet",
"portdir": "python/py-greenlet",
"version": "3.0.1",
"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": 2297
}
],
"variants": [
"universal"
],
"dependencies": [
{
"type": "build",
"ports": [
"py39-build",
"py39-setuptools",
"py39-wheel",
"py39-installer",
"clang-16"
]
},
{
"type": "lib",
"ports": [
"python39"
]
},
{
"type": "test",
"ports": [
"py39-pytest"
]
}
],
"depends_on": [
{
"type": "lib",
"ports": [
"py39-neovim",
"py39-gevent",
"py39-scoop",
"py39-sqlalchemy",
"py39-eventlet",
"py39-bpython"
]
},
{
"type": "test",
"ports": [
"py39-structlog",
"py39-werkzeug"
]
}
]
}