Need help with pyleus?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

407 Stars 109 Forks Apache License 2.0 542 Commits 69 Opened issues


Pyleus is a Python framework for developing and launching Storm topologies.

Services available


Need anything else?

Contributors list


Pyleus is a Python 2.6+ framework for developing and launching

Apache Storm
_ topologies.

Please visit our


=============== ================ master develop =============== ================ |master-status| |develop-status| =============== ================

.. |master-status| image:: :target:

.. |develop-status| image:: :target:


Pyleus is a framework for building Apache Storm topologies in idiomatic Python.

With Pyleus you can:

  • define a topology with a simple YAML file

  • have dependency management with a

  • run faster thanks to Pyleus’

    _ based serializer
  • pass options to your components directly from the YAML file

  • use the Kafka spout built into Storm with only a YAML change


From PyPI:

.. code-block:: shell

$ pip install pyleus


You do NOT need to install pyleus on your Storm cluster. That’s cool, isn't it?

However, if you are going to use

system_site_packages: true
in your config file, you should be aware that the environment of your Storm nodes needs to match the one on the machine used for building the topology. This means you actually have to install pyleus on your Storm cluster in this case.

Try it out!

.. code-block:: shell

$ git clone $ pyleus build pyleus/examples/exclamationtopology/pyleustopology.yaml $ pyleus local exclamation_topology.jar

Or, submit to a Storm cluster with:

.. code-block:: shell

$ pyleus submit -n NIMBUSHOST exclamationtopology.jar


_ directory contains several annotated Pyleus topologies that try to cover as many Pyleus features as possible.

Pyleus command line interface

  • Build a topology:

.. code-block:: shell

 $ pyleus build /path/to/pyleus_topology.yaml
  • Run a topology locally:

.. code-block:: shell

 $ pyleus local /path/to/topology.jar
  • Submit a topology to a Storm cluster:

.. code-block:: shell

 $ pyleus submit [-n NIMBUS_HOST] /path/to/topology.jar
  • List all topologies running on a Storm cluster:

.. code-block:: shell

 $ pyleus list [-n NIMBUS_HOST]
  • Kill a topology running on a Storm cluster:

.. code-block:: shell

 $ pyleus kill [-n NIMBUS_HOST] TOPOLOGY_NAME


pyleus -h
for a list of all the available commands or
pyleus CMD -h
for any command-specific help.

Write your first topology

Please refer to the

_ for a more detailed tutorial.

Organize your files ^^^^^^^^^^^^^^^^^^^

This is an example of the directory tree of a simple topology:

.. code-block:: none

myfirsttopology/ |-- myfirsttopology/ | |-- | |-- | |-- |-- pyleus_topology.yaml |-- requirements.txt

Define the topology layout ^^^^^^^^^^^^^^^^^^^^^^^^^^

A simple

should look like the following:

.. code-block:: yaml

name: myfirsttopology


   - spout:
       name: my-first-spout
       module: my_first_topology.dummy_spout

  • bolt: name: my-first-bolt module: my_first_topology.dummy_bolt groupings:
      - shuffle_grouping: my-first-spout

This defines a topology where a single bolt subscribes to the output stream of a single spout. As simple as it is.

Write your first spout ^^^^^^^^^^^^^^^^^^^^^^

This is the code implementing

.. code-block:: python

from pyleus.storm import Spout

class DummySpout(Spout):

   OUTPUT_FIELDS = ['sentence', 'name']

def next_tuple(self): self.emit(("This is a sentence.", "spout",))

if name == 'main': DummySpout().run()

Write your first bolt ^^^^^^^^^^^^^^^^^^^^^

Let's now look at

.. code-block:: python

from pyleus.storm import SimpleBolt

class DummyBolt(SimpleBolt):

   OUTPUT_FIELDS = ['sentence']

def process_tuple(self, tup): sentence, name = tup.values new_sentence = "{0} says, "{1}"".format(name, sentence) self.emit((new_sentence,), anchors=[tup])

if name == 'main': DummyBolt().run()

Run your topology ^^^^^^^^^^^^^^^^^

Run the topology on your local machine for debugging:

.. code-block:: shell

pyleus build myfirsttopology/pyleustopology.yaml pyleus local --debug myfirst_topology.jar

When you are done, hit


Configuration File ^^^^^^^^^^^^^^^^^^

You can set default values for many configuration options by placing a

file in your home directory:

.. code-block:: none

[storm] nimbushost: jvmopts:

[build] pypiindexurl:


  • Apache Storm Documentation


Pyleus is licensed under the Apache License, Version 2.0:

.. _Apache Storm: .. _Apache Storm Documentation: .. _MessagePack: .. _documentation: .. _examples:

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.