Asynchronous Component based Event Application Framework
circuits is a Lightweight Event driven and Asynchronous Application Framework for the Python Programming Language with a strong Component Architecture.
circuits also includes a lightweight, high performance and scalable HTTP/WSGI compliant web server as well as various I/O and Networking components.
#!/usr/bin/env python """circuits Hello World""" from circuits import Component, Event class hello(Event): """hello Event""" class App(Component): def hello(self): """Hello Event Handler""" print("Hello World!") def started(self, component): """Started Event Handler This is fired internally when your application starts up and can be used to trigger events that only occur once during startup. """ self.fire(hello()) # Fire hello Event raise SystemExit(0) # Terminate the Application App().run()
#!/usr/bin/env python """Simple TCP Echo Server This example shows how you can create a simple TCP Server (an Echo Service) utilizing the builtin Socket Components that the circuits library ships with. """ from circuits import handler, Debugger from circuits.net.sockets import TCPServer class EchoServer(TCPServer): @handler("read") def on_read(self, sock, data): """Read Event Handler This is fired by the underlying Socket Component when there has been new data read from the connected client. ..note :: By simply returning, client/server socket components listen to ValueChagned events (feedback) to determine if a handler returned some data and fires a subsequent Write event with the value returned. """ return data # Start and "run" the system. # Bind to port 0.0.0.0:9000 app = EchoServer(9000) Debugger().register(app) app.run()
#!/usr/bin/env python from circuits.web import Server, Controller class Root(Controller): def index(self): """Index Request Handler Controller(s) expose implicitly methods as request handlers. Request Handlers can still be customized by using the ``@expose`` decorator. For example exposing as a different path. """ return "Hello World!" app = Server(("0.0.0.0", 9000)) Root().register(app) app.run()
- event driven
- concurrency support
- component architecture
- asynchronous I/O components
- no required external dependencies
- full featured web framework (circuits.web)
- coroutine based synchronization primitives
- circuits has no dependencies beyond the Python Standard Library.
- Linux, FreeBSD, Mac OS X, Windows
- Python 2.6, 2.7, 3.2, 3.3, 3.4
- pypy 2.0, 2.1, 2.2
The simplest and recommended way to install circuits is with pip. You may install the latest stable release from PyPI with pip:
> pip install circuits
If you do not have pip, you may use easy_install:
> easy_install circuits
> python setup.py install
You can install the development version via pip install circuits==dev.
circuits is licensed under the MIT License.
We welcome any questions or feedback about bugs and suggestions on how to improve circuits. Let us know what you think about circuits. @pythoncircuits.
Do you have suggestions for improvement? Then please Create an Issue with details of what you would like to see. I’ll take a look at it and work with you to either incorporate the idea or find a better solution.
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size circuits-3.1.0-py2.7.egg (550.8 kB)||File type Egg||Python version 2.7||Upload date||Hashes View|
|Filename, size circuits-3.1.0-py2-none-any.whl (227.9 kB)||File type Wheel||Python version 2.7||Upload date||Hashes View|
|Filename, size circuits-3.1.0.tar.gz (2.1 MB)||File type Source||Python version None||Upload date||Hashes View|