Why the Python implementation of ISUCON 5 used Bottle

https://github.com/bottlepy/bottle

Considering the following points of view, I chose Bottle, which I thought was good overall.

Compatible with Python 3

I wanted to use Python 3 for this ISUCON.

It's been many years since 3 came out, and 2/3 of the major libraries are being supported.

In Python, the appearance and writing style did not change significantly even if it changed from 2 to 3, and there was a point that even users of 2 series who had never used 3 series could read and write without problems.

Well-known frameworks supported Python3, so they all seemed to work.

Dependence is standard library only

In ISUCON, it is necessary to solve the problem in a short time, and I want the questioner to concentrate on that, so the learning cost of the framework is required to be low.

Bottle depends only on the standard library. If you use the standard library, you can expect to be familiar with it, and you can also find documents and information.

If you rely on other third-party libraries, it will take more time to explore the framework usage and options.

Framework not chosen

CherryPy

http://cherrypy.org/

--There is history and name recognition --There seems to be no dependence on third parties --Development is ongoing ――The way to write a handler is class-based, but it can be written simply.

It didn't have a template engine, and it had more files and larger size than Bottle.

Flask

http://flask.pocoo.org/

It was used in the Python implementation in ISUCON 4.

--High name recognition --There is a lot of information in Japanese --Development is ongoing --Handlers are easy to write like Sinatra

It also has functions for large-scale apps such as Blueprints, and the framework is large.

Tornado

https://github.com/tornadoweb/tornado

――Is your name recognition reasonable? --There is a little dependence on third parties --Development is ongoing (Facebook has it now) ――The way to write a handler is class-based, but it can be written simply.

Personally my favorite framework.

Since it supports asynchronous IO, it may be suitable for applications such as ISUCON where a large number of bench markers are accessed. However, since asynchronous IO is processed efficiently with a single thread and there is a habit, I did not adopt it because I thought it would be bad if the participants were confused.

Maybe it's better to replace it with Tornado when doing the final problem in Python.

Falcon

http://falconframework.org/

The speed seems to be a selling point.

The scale was large.

Django

https://www.djangoproject.com/

I thought it was too heavy.

Pyramid

http://www.pylonsproject.org/

I thought it wouldn't match ISUCON somehow.

Recommended Posts

Why the Python implementation of ISUCON 5 used Bottle
the zen of Python
[Python] Read the source code of Bottle Part 1
A python implementation of the Bayesian linear regression class
Why is the first argument of [Python] Class self?
A reminder about the implementation of recommendations in Python
Towards the retirement of Python2
About the ease of Python
Python implementation of particle filters
Implementation of quicksort in Python
About the features of Python
The Power of Pandas: Python
A simple Python implementation of the k-nearest neighbor method (k-NN)
The story of how the Python bottle worked on Sakura Internet
Commands often used in the development environment during Python implementation
The story of Python and the story of NaN
[Python] The stumbling block of import
First Python 3 ~ The beginning of repetition ~
Python implementation of self-organizing particle filters
Existence from the viewpoint of Python
pyenv-change the python version of virtualenv
Implementation of life game in Python
Change the Python version of Homebrew
[Python] Understanding the potential_field_planning of Python Robotics
Review of the basics of Python (FizzBuzz)
Implementation of desktop notifications using Python
Python implementation of non-recursive Segment Tree
Implementation of Light CNN (Python Keras)
Implementation of original sorting in Python
Implementation of Dijkstra's algorithm with python
About the basics list of Python basics
Learn the basics of Python ① Beginners
[Python] I thoroughly explained the theory and implementation of logistic regression
[Python] I thoroughly explained the theory and implementation of decision trees
I tried to summarize the frequently used implementation method of pytest-mock
Change the length of Python csv strings
Check the behavior of destructor in Python
[Python3] Understand the basics of Beautiful Soup
Othello-From the tic-tac-toe of "Implementation Deep Learning" (3)
The story of making Python an exe
Learning notes from the beginning of Python 1
Check the existence of the file with python
About the virtual environment of python version 3.7
[Python] Understand the content of error messages
[Python3] Rewrite the code object of the function
I didn't know the basics of Python
The result of installing python in Anaconda
[Python] Try pydash of the Python version of lodash
[python] Checking the memory consumption of variables
Check the path of the Python imported module
The story of manipulating python global variables
Hit a method of a class instance with the Python Bottle Web API
[python] [meta] Is the type of python a type?
The basics of running NoxPlayer in Python
[Basics of python basics] Why do __name__ == "__main__"
Pandas of the beginner, by the beginner, for the beginner [Python]
Why is cross entropy used for the objective function of the classification problem?
The Python project template I think of.
I read the implementation of golang channel
In search of the fastest FizzBuzz in Python
Python Basic Course (at the end of 15)