Skip to content

Commit d5b8b67

Browse files
committed
update readme
1 parent ca6acc5 commit d5b8b67

File tree

1 file changed

+34
-12
lines changed

1 file changed

+34
-12
lines changed

README.md

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,38 @@
11
<p align="center">
2-
<img src="assets/pyper.png" alt="Pyper" style="width: 500px;">
2+
<img src="https://raw.githubusercontent.com/pyper-dev/pyper/refs/heads/main/assets/pyper.png" alt="Pyper" style="width: 500px;">
33
</p>
4-
<p align="center"
4+
<p align="center" style="font-size: 1.5em;">
55
<em>Concurrent Python made simple</em>
66
</p>
77

8+
</p>
9+
10+
<p align="center">
11+
<a href="https://github.com/pyper-dev/pyper/actions/workflows/test.yml" target="_blank">
12+
<img src="https://github.com/pyper-dev/pyper/actions/workflows/test.yml/badge.svg" alt="Test">
13+
</a>
14+
<a href="https://coveralls.io/github/pyper-dev/pyper" target="_blank">
15+
<img src="https://coveralls.io/repos/github/pyper-dev/pyper/badge.svg" alt="Coverage">
16+
</a>
17+
<a href="https://pypi.org/project/python-pyper" target="_blank">
18+
<img src="https://img.shields.io/pypi/v/python-pyper?color=%2334D058&label=pypi%20package" alt="Package version">
19+
</a>
20+
<a href="https://pypi.org/project/python-pyper" target="_blank">
21+
<img src="https://img.shields.io/pypi/pyversions/python-pyper.svg?color=%2334D058" alt="Supported Python versions">
22+
</a>
23+
</p>
824

925
---
1026

1127
Pyper is a generalized framework for concurrent data-processing, based on functional programming patterns. Used for 🌐 **Data Collection**, 🔀 **ETL systems**, and general-purpose 🛠️ **Python Scripting**
1228

13-
See the [Documentation]()
29+
See the [Documentation](https://pyper-dev.github.io/pyper/)
1430

1531
Key features:
1632

17-
* 💡**Intuitive Code**: Easy to learn, easy to think about. Implements intuitive abstractions to seamlessly unify threaded and asynchronous work.
18-
* 🚀 **Functional Paradigm**: Python functions are the building blocks of data pipelines. Lets you write clean, reusable code without effort.
19-
* 🛡️ **Safety**: Hides the heavy lifting of underlying task creation/execution. No more worrying about race conditions, memory leaks, and thread-level error handling.
33+
* 💡**Intuitive API**: Easy to learn, easy to think about. Implements clean abstractions to seamlessly unify threaded and asynchronous work.
34+
* 🚀 **Functional Paradigm**: Python functions are the building blocks of data pipelines. Let's you write clean, reusable code naturally.
35+
* 🛡️ **Safety**: Hides the heavy lifting of underlying task creation and execution. No more worrying about race conditions, memory leaks, and thread-level error handling.
2036
***Efficiency**: Designed from the ground up for lazy execution, using queues, workers, and generators.
2137
***Pure Python**: Lightweight, with zero sub-dependencies.
2238

@@ -25,9 +41,11 @@ Key features:
2541
Install the latest version using `pip`:
2642

2743
```console
28-
$ pip install pyper
44+
$ pip install python-pyper
2945
```
3046

47+
(Note that `python-pyper` is the pypi registered package)
48+
3149
## Example
3250

3351
Let's simulate a pipeline that performs a series of transformations on some data.
@@ -68,6 +86,7 @@ async def print_sum(data):
6886

6987

7088
async def main():
89+
# Define a pipeline of tasks using `pyper.task`
7190
run = task(step1) \
7291
>> task(step2, concurrency=20) \
7392
>> task(step3, concurrency=20) \
@@ -89,7 +108,9 @@ In our pipeline:
89108

90109
* `task(step3, concurrency=20)` spins up 20 threaded workers, taking each value as input and returning an output
91110

92-
The script therefore takes ~2 seconds to complete, as stage 2 and 3 in the pipeline only take the 1 second of sleep time, performed concurrently. If you'd like, experiment with tweaking the `limit` and `concurrency` values for yourself.
111+
The script therefore takes ~2 seconds to complete, as `step2` and `step3` in the pipeline only take the 1 second of sleep time, performed concurrently. If you'd like, experiment with tweaking the `limit` and `concurrency` values for yourself.
112+
113+
---
93114

94115
<details markdown="1">
95116
<summary><u>What does the logic translate to in non-concurrent code?</u></summary>
@@ -202,9 +223,9 @@ async def main():
202223
await run(20) # takes ~2 seconds
203224
```
204225

205-
This implementation achieves the basic desired concurrent data flow, but still lacks some quality-of-life features that Pyper takes care of, like thread-level error handling.
226+
This implementation achieves the basic desired concurrent data flow, but still lacks some quality-of-life features that Pyper takes care of, like error handling within threads.
206227

207-
Pyper abstracts away the complexities of managing queues and workers, so that this code can be reduced to the two-line main function in the example above.
228+
Pyper handles the complexities of managing queues and workers, so that this code can be reduced to the two-line main function in the example above.
208229

209230
</details>
210231

@@ -248,22 +269,23 @@ def main():
248269
>> task(step2, concurrency=20) \
249270
>> task(step3, concurrency=20) \
250271
& print_sum
272+
# Run synchronously
251273
run(limit=20)
252274

253275

254276
if __name__ == "__main__":
255277
main() # takes ~2 seconds
256278
```
257279

258-
A pipeline consisting of _at least one asynchronous function_ becomes an `AsyncPipeline`, which exposes the same logical function, provided `async` and `await` syntax in all of the obvious places. This makes it effortless to unify synchronously defined and asynchronously defined funcions where need be.
280+
A pipeline consisting of _at least one asynchronous function_ becomes an `AsyncPipeline`, which exposes the same logical function, provided `async` and `await` syntax in all of the obvious places. This makes it effortless to unify synchronously defined and asynchronously defined functions where need be.
259281

260282
</details>
261283

262284
## Examples
263285

264286
To explore more of Pyper's features, see some real-world examples below:
265287

266-
1. [Example]()
288+
1. (_to do_)
267289

268290
## Dependencies
269291

0 commit comments

Comments
 (0)