<commit_before># Pika, an AMQP 0-8/0-9-1 client library for Python

Pika is a pure-Python implementation of the AMQP 0-8 protocol (with an
0-9-1 implementation on a separate git branch, for now) that tries to
stay fairly independent of the underlying network support library. It
also tries to stay neutral as to programming style, supporting (where
possible) both synchronous and asynchronous approaches.

 * Since threads aren't appropriate to every situation, it doesn't
   require threads. It takes care not to forbid them, either. The same
   goes for greenlets, callbacks, continuations and generators.

 * People may be using direct sockets, `asyncore`, Twisted, plain old
   `select()`, or any of the wide variety of ways of getting network
   events to and from a python application. Pika tries to stay
   compatible with all of these, and to make adapting it to a new
   environment as simple as possible.

Pika provides adapters for

 * asyncore (part of the Python standard library)
 * direct blocking socket I/O

Support for Twisted and `select()` (as distinct from `asyncore`) is on
the horizon.

## Synchronous programming style, no concurrency

This style of programming is especially appropriate for small scripts,
short-lived programs, or other simple tasks. Code is easy to read and
somewhat easy to reason about.
<commit_msg>Notes on roadmap<commit_after># Pika, an AMQP 0-8/0-9-1 client library for Python

Pika is a pure-Python implementation of the AMQP 0-8 protocol (with an
0-9-1 implementation on a separate git branch, for now) that tries to
stay fairly independent of the underlying network support library. It
also tries to stay neutral as to programming style, supporting (where
possible) both synchronous and asynchronous approaches.

 * Since threads aren't appropriate to every situation, it doesn't
   require threads. It takes care not to forbid them, either. The same
   goes for greenlets, callbacks, continuations and generators.

 * People may be using direct sockets, `asyncore`, Twisted, plain old
   `select()`, or any of the wide variety of ways of getting network
   events to and from a python application. Pika tries to stay
   compatible with all of these, and to make adapting it to a new
   environment as simple as possible.

Pika provides adapters for

 * asyncore (part of the Python standard library)
 * direct blocking socket I/O

Support for Twisted and `select()` (as distinct from `asyncore`) is on
the horizon.

## Roadmap

 * Support continuation-passing-style, for asynchronous programming
   (and, eventually, Twisted support)

 * Fix up the slightly odd `ChannelHandler.inbound` queue: it plainly
   wants to be something else (after all, when do we get a command we
   don't understand? and why aren't we complaining with the
   appropriate AMQP exception when we do?)

 * Track `Channel.Flow` state for each channel. Emit events when it
   changes.

 * Complain when publishing to a flow-limited channel, either by a
   thrown exception or a block-until-flow-control-goes-away option.

## Synchronous programming style, no concurrency

This style of programming is especially appropriate for small scripts,
short-lived programs, or other simple tasks. Code is easy to read and
somewhat easy to reason about.

{'fraction_non_alphanumeric': 0.05227759095077958, 'fraction_numerical': 0.006114338122898196, 'mean_word_length': 4.185419968304279, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3123657', 'n_tokens_mistral': 859, 'n_tokens_neox': 812, 'n_words': 475}