Skip to main content

Coroutines for dataflow pipelines

Project description

==> COP
coroutines for dataflow pipelines


==> ABOUT
Cop is designed to make it easy
to write readable dataflow programs.
Speed is important, but probably
isn't there yet.

This library is a learning exercise.
At this stage, it should really be
seen as a source for you to see
how to implement your own coroutines.

The primary motivation for cop is
to facilitate readable and flexible
dataflow programming. Once the
project is more mature, its focus
could shift to enhancing performance.


==> TERMINOLOGY
There are three basic terms that are
used within cop: sources, steps and
sinks.

/sources/ Feed data to steps.
(cop.file, cop.web)

/steps/ Process data, then
feed it to a target.

/sinks/ Process data.


==> USAGE
Using cop is straight forward. Examples
generally follow the following pattern:

from cop.sources import source
from cop.steps import step1, step2
from cop.sinks import sink

source(step1(step2(sink()))))

/examples/

>>> from cop.sources import web
>>> from cop.steps import delimit
>>> from cop.stops import grep
>>> from cop.steps import transform
>>> from cop.sinks import printer

>>> url = 'http://python.org'
>>> web(url,
... delimit('\n',
... transform(lambda l: l.lower(),
... grep('monty',
... printer())))

In this case, nothing comes out. That's
basically because there's very little
about Monty Python at python.org.

/non-linear pipelines/
Sometimes, a linear pathway isn't enough.
Perhaps we would like to do something
with intermediate results.

Enter `cop.flow`. It provides `broadcast`
for sending data to multiple steps, and
`loadbalance`, which implements a round-
robin load balancing system between steps.


==> BACK STORY
The start of this whole thing is from
code written by David Beazley, especially
his tutorial on coroutines[0]. That
work is excellent and should basically
be considered the manual for this library.

I read the PDF of the tutorial in the
morning. By the end of the evening I had
a few dozen workable functions that could
be strung together in an almost arbitary
function.


==> FUTURE PLANS
I would really like to see interacting
with multiple cores and hosts become
trivally easy.


==> HACKING
If you would like to contribute to cop,
that's great. It's easy to do and will
help people. At the moment, test
coverage is at a healthy 0%.

The plan is to use heavy use of doctests.
`cop.printer` should be quite useful:

>> source(sink(printer()))
result

[sidenote]
I use >> as prompt when I don't want
doctest to claim it. I find this
preferable to using the skip directive.


==> LEGAL
/code/
Apart from code written by David Beazley,
which is used with with permission, the
code the copyright of Tim McNamara[1].

The code is released under the Apache 2
license[2].

/docs/
All documentation is the copyright of
Tim McNamara. All docs are released under
the "Creative Commons Attribution 3.0
New Zealand (CC BY 3.0)" licence[3], in
addition to the Apache 2 licence where it
applies.

/trade marks/
"cop" is an unregistered trade mark of
Tim McNamara under New Zealand law.

/Consumer Guarantees Act 1993/
If you use this software for personal use,
you have certain rights under the Consumer
Guarantees Act 1993. They are explained by
the Ministry of Consumer Affairs[4].

Generally speaking, cop must be of
"acceptable" quality and be fit for the
purposes described.

However, when judging acceptable quality,
please consider that you are downloading
free software from the Internet.

[sidenote]
I'm not entirely certain whether
software code counts as a good or a
service for the purpose of the Act

[sidenote]
No, we can't opt out of these provisions.
Irrespective of the terms of the licence.

==> FURTHER READING

"Structure and Interpretation of Computer Programs"*
Chaper 5: Sequences and Coroutines (esp. 5.3 "Coroutines")

http://wla.berkeley.edu/~cs61a/fa11/lectures/streams.html

This is not the original SICP, written in Scheme, but
a version which is Python specific.

==> REFERENCES

[0] http://dabeaz.com/coroutines
[1] @timClicks
<code@timmcnamara.co.nz>
[2] http://www.apache.org/licenses/LICENSE-2.0
[3] http://creativecommons.org/licenses/by/3.0/nz/
[4] http://www.consumer.org.nz/reports/consumer-guarantees-act/the-guarantees

Project details


Release history Release notifications | RSS feed

This version

0.2

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cop-0.2.tar.gz (6.2 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page