Coder Social home page Coder Social logo

supernate / api-hour Goto Github PK

View Code? Open in Web Editor NEW

This project forked from eyepea/api-hour

0.0 2.0 0.0 7.61 MB

Write efficient network daemons (HTTP, SSH...) with ease.

Home Page: http://pythonhosted.org/api_hour/

License: Other

Makefile 1.36% Python 53.01% Nginx 2.37% ApacheConf 40.39% Shell 2.86%

api-hour's Introduction

API Hour

API-Hour is a lightweight daemon framework, that lets you write powerful applications.

It was created to answer the need for a simple, robust, and super-fast server-side environment to build very efficient Daemons with ease.

By default, API-Hour Starter Kit (Cookiecutter) creates for you a HTTP daemon to develop WebServices.

With API-Hour, you can quickly convert any AsyncIO server library to multi-processing daemon, ready for production.

image

Quick'n'dirty HTTP benchmarks on a kitchen table

image

Scale: Number of queries during 30 seconds with 400 simultaneous connexions.

Benchmark made on a Dell Precision M6800 between API-Hour and Gunicorn with 16 workers.

For details, read information in benchmarks.

Where is the magic to have theses performances ?

Architecture matters a lot more that tools.

We use asynchronous and multiprocess patterns, combined together, to handle as much as possible HTTP requests.

Ideally, the limitation should be your network card, not your CPU nor memory.

Moreover, we've tried to reduce as much as possible layers between your code and async sockets.

For each layer, we use the best in term of performance and simplicity:

  1. AsyncIO: an easy asynchronous framework, directly integrated in Python 3.4+
  2. aiohttp.web: HTTP protocol implementation for AsyncIO + Web framework
  3. ujson: fastest JSON serialization

Examples

  1. API-Hour Starter Kit (Cookiecutter)
  2. API-Hour implementation of TechEmpower Web Framework Benchmarks
  3. HTTP+SSH Daemon
  4. Quick'n'dirty benchmarks on a kitchen table

How-to start an API-Hour project ?

You can follow one of our tutorials

Support

Requirements

  • Python 3.3+

Install

Follow official documentation.

License

API-Hour is offered under the Apache 2 license.

Architecture

API-Hour is a glue between your code and Gunicorn to launch your code in several process.

Origin

API-Hour was a fork of aiorest, now only based on Gunicorn for multiprocessing.

Thanks

Thanks to Gunicorn, aiorest, aiohttp and AsyncIO community, they made 99,9999% of the job for API-Hour.

Special thanks to Andrew Svetlov, the creator of aiorest.

Goals of API-Hour

  1. Fast: API-Hour is designed from bottom-up to be extremely fast, and capable of handling a huge load. It uses Python 3 and its new powerful AsyncIO package.
  2. Scalable: API-Hour is built to be elastic, and easily scalable.
  3. Lightweight:
    1. small codebase: Doing less means being faster: the codebase for processing an request is kept as small as possible. Beyond this base foot-print, you can of course activate, preload and initialize more plugins or packages , but that choice is yours.
    2. flexible setup: Some people have no problems with using many dependencies, while others want to have none (other than Python). Some people are ok to loose a bit on performance, for the ease (and speed) of coding, while others wouldn't sacrifice a millisecond for ready-made functionality. These choices are yours, so there are no mandatory extra layer, plugin or middleware.
  4. Easy: API-Hour is meant to be very easy to grasp: No steep learning curve, no mountain of docs to read: Download our turn-key "Hello-world" applications, and immediately start coding your own application from there.
  5. Packages-friendly and friendly-packages: We try to let you use external packages without the need to re-write them, adapt them, " wrap " them or embed them in the framework. On the other hand, API-Hour " plugins " are written as much as possible to be usable as stand-alone packages outside the framework, to benefit to more people.
  6. Asynchronous... or not: If you don't need the extra complexity of building asynchronous code, you don't have to (you'll still enjoy tremendous performance). You can just handle your requests in a traditional synchronous way. On the other hand, if your project does IO or processing that could benefit from parallelizing tasks, the whole power of Async. IO, futures, coroutines and tasks is at your fingertips. All provided plugins (in particular, Database plugins) are Async-ready.

api-hour's People

Contributors

asvetlov avatar icart avatar imbolc avatar ludovic-gasc avatar mind1m avatar popravich avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.