Join the DZone community and get the full member experience.Join For Free
xMatters delivers integration-driven collaboration that relays data between systems, while engaging the right people to proactively resolve issues. Read the Monitoring in a Connected Enterprise whitepaper and learn about 3 tools for resolving incidents quickly.
I benchmarked how goless performs under different backends (goless is a library that provides a Go-like concurrency model for Python, on top of stackless, PyPy, or gevent). Here are the results, also available on the goless readthedocs page:
Platform Backend Benchmark Time ======== ========= ============== ======= PyPy stackless chan_async 0.08400 CPython stackless chan_async 0.18000 PyPy gevent chan_async 0.46800 CPython gevent chan_async 1.32000 ~~~~~~~~ ~~~~~~~~~ ~~~~~~~~~~~~~~ ~~~~~~~ PyPy stackless chan_buff 0.08000 CPython stackless chan_buff 0.18000 PyPy gevent chan_buff 1.02000 CPython gevent chan_buff 1.26000 ~~~~~~~~ ~~~~~~~~~ ~~~~~~~~~~~~~~ ~~~~~~~ PyPy stackless chan_sync 0.04400 CPython stackless chan_sync 0.18000 PyPy gevent chan_sync 0.44800 CPython gevent chan_sync 1.26000 ~~~~~~~~ ~~~~~~~~~ ~~~~~~~~~~~~~~ ~~~~~~~ PyPy stackless select 0.06000 CPython stackless select 0.38000 PyPy gevent select 0.60400 CPython gevent select 1.94000 ~~~~~~~~ ~~~~~~~~~ ~~~~~~~~~~~~~~ ~~~~~~~ PyPy stackless select_default 0.00800 PyPy gevent select_default 0.01200 CPython stackless select_default 0.19000 CPython gevent select_default 0.25000
The trends are that PyPy with its built-in stackless support is fastest, then Stackless Python (2-5x), then PyPy with gevent (5-10x), and finally CPython with gevent (15-30x).
Remember that these are benchmarks of goless itself; goless performance characteristics may be different in real applications. For example, if you have lots of C extensions, CPython/stackless may pull ahead due to stack switching.
If you’re using goless for anything, I’d love to get some benchmarks, and find out how it’s working, so please comment below, or create a GitHub issue.
Disclaimers: It’s possible that goless is inefficiently using gevent, but the backend-specific code is so simple I doubt it (see goless/goless/backends.py). These benchmarks are all done against Python 2.7. Also I am no benchmark master (especially with PyPy) so there may be problems, look over goless/benchmark.py for benchmark code. These were done mostly for curiosity.
Published at DZone with permission of Rob Galanakis , DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.