完成図 この記事では、以下の順でアプリケーションを作成します。 Python アプリケーションで Hello World を実行 動的 Web サーバー(アプリケーションサーバー)で Hello World を実行 Web アプリケーションフレームワークで Hello World を実行 静的 Web サーバーで Hello World を実行 静的Webサーバ - コンピューター (ハードウェア) と HTTP サーバ (ソフトウェア) から構成されます。 - サーバが保持しているファイルをブラウザーへ「そのまま」送る 動的Webサーバ - 静的Webサーバと一般的にはアプリケーションサーバとデータベースからなります。 - 保持しているファイルを変更してから、HTTP サーバを通してブラウザーに送る https://developer.mozilla.org/ja/docs/Learn/
1. はじめに 前回の記事ではFlaskのアプリケーションで同時アクセスを有効にする方法について説明しました。しかし、処理によっては同時実行数を制限しなけばならない場合があるかと思います。 リソースを消費する重たい処理 たとえば巨大な画像ファイルを生成する処理など もともと同時実行を考慮していない処理 たとえば機械学習におけるモデルの構築処理など 今回は特定の処理に対して多重実行を制御する方法について説明したいと思います。 1.1. ポイント 多重実行の制御にはQueueを利用する 多重制御の関数デコレータ@multiple_controlを作成する 制限を掛ける処理に@multiple_controlデコレータを付与する @app.route('/world/<string:value>', methods=['GET']) @multiple_control(singleQueue)
1. はじめに Flaskのデフォルトでは複数のリクエストを同時に処理することができません。HTTPリクエストを並列処理するのではなくシングル(直列)処理で行うため、同時アクセスがあると最初のリクエストの処理が完了するまで待ちが発生します。 これは公式ドキュメントにも書かれています。 While lightweight and easy to use, Flask’s built-in server is not suitable for production as it doesn’t scale well and by default serves only one request at a time. Some of the options available for properly running Flask in production are documented here.
はじめに 定周期で実行されるプログラムは色々なシステムで実装されるが、上手に実装しないと意図した時間通りに実行されない。最近Pythonでプログラムの実装をする機会が多いので、Pythonで実行する方法をまとめる。実装の方法次第だが、下記のとおりである。 [NG] sleepで待つ [NG] threadingでタイマーを使う [OK] 処理時間を考慮してthreadingとsleepを使う [OK] シグナルハンドラを利用する 方法 以降で1秒周期でプログラムを実行する方法についてまとめていく。なお、ヒストグラム作成のために出力した時間(N数)は1000個である。 [NG] sleepによる待機 下記のプログラムに示すように、一定時間待つようにする。
2019年8月12日2024年4月10日 この記事では、Flask, uWSGI, nginxそれぞれの役割とインストール方法を説明した後に、上の図のようにFlask, uWSGI, nginxを連携させてHello Worldする方法をコード付きで解説します。コードと設定ファイルには一行一行説明を記載しているので、内容理解にお役立てください。 著者環境 ubuntu: 18.04 python: 3.6.8 役割説明 まず今回利用するFlask, uWSGI, nginxそれぞれの役割について説明します。 Flaskとは FlaskはPythonを使ってWebアプリを簡単に作成するための骨組み(フレームワーク)です。ウェブアプリに必要な機能の骨組みを持っているので、あとは自分が作りたい機能だけを骨組みの周りに肉付けする形で実装することでWebアプリが簡単に作れます。 nginxとは
PythonでWebアプリケーションを作成した後サーバー上で稼働させる場合、アプリケーションサーバが必要となります。(開発時は組み込みのサーバーで十分ですが、本番で使用することは推奨されていません。)ここではPythonでよく使われるuWSGIというアプリケーションサーバについて学習しましょう。 uWSGIとは WSGIとは uWSGIについて学習する前に、WSGIについて学習しましょう。WSGI(Web Server Gateway Interface) とは、PythonのWebアプリケーションとWebサーバー間とのやり取りの規約、プロトコールのことでPEP333で定義されています。 https://www.python.org/dev/peps/pep-3333/ Pythonの大抵のWebフレームワークはこのWSGIという規約に則っています。有名どころとして以下のフレームワークが挙
先日flaskとVue.jsを使って開発をしていたらflaskとVue.jsのマスタッシュが衝突してしまい6時間くらいハマってしまったので解決方法を残しておきます flaskを使っていてVue.jsが反応しなければ試してみる価値があると思います。 Vue.jsとflaskのマスタッシュが衝突するVue.jsとflaskはこんな感じで書いていきますが、よく見てみるとVue.jsとflaskの両方でマスタッシュ構文が使われています。 これが衝突してしまい、Vue.jsのマスタッシュ構文が機能しなくなります マスタッシュ構文 → {{ }} Vue.jsのexample <div id="app"> <p>{{ message }}</p> </div> <script> var app = new Vue({ el: "#app", data:{ message: "Vue.js" } })
Pythonでログ出力といえば、標準モジュールの logging を利用する方法が一般的ですね。ググって出くるブログ記事を読めば、なんとなくの理解でも使えてしまうので、しっかりと仕組みを理解せずとも使えてしまいますし、それでも問題ないケースも多いと思います。 ただし、少し凝ったことをしようとするならば、一度Pythonのロギングの仕組みを抑えておいたほうが圧倒的に実装が楽になります。今回はloggingモジュールの仕組みを理解したうえで使いこなすこと目的に、図解やコードを交えて分かりやすく解説していきます。 Pythonがログを出力する仕組み まずは、ログ出力機能を実装するオブジェクトたちの機能・役割を整理します。 オブジェクト 機能・役割 ログレコード(logging.LogRecord) ログ出力されるメッセージそのものの情報を持つ。ロガー間でやり取りされるのはこのログレコードである。
Pythonにはclickというコマンドラインパーサとして使えるライブラリがあります。同様のライブラリとして以前からargparseがありますが、clickはargparseよりももっと簡単に使えるライブラリです。 clickでコマンドラインパーサを書く例は以下になります。 # main.py import click @click.command() @click.option( "--count", type=int, default=1, required=True, help="Number of greetings.", ) @click.option( "--name", type=str, default="Your name", required=True, help="The person to greet.", ) def hello( count: int, name
ファイルやディレクトリの変更をトリガーにしてプログラムを起動する。incronがダメなら、inotifyで! ファイルやディレクトリを監視したい! ここでも過去に取り上げていますが、incronを用いて任意に指定するファイルやディレクトリの更新を監視することが出来ます。 ところが、incronは何度かバグが発生し、且つ、メンテナンスが遅れ遅れになっていることもあり、利用することを断念しました。 systemdでサポートされているinotifyを利用する手段が次に出てきた訳ですが、当初は情報も少なくて困ったものです(^^ゞ というところで、CentOS 7上のPython 3で利用できるか確認してみました。 結論としては、Python 2.xと比較して、ほぼデフォルト状態のPython 3で利用することが出来ました。 どんなイベントを監視できるのか? いろんなイベントを監視できるので、詳細に
はじめに vue-cliで雛形のインストール(フロントエンド) サンプルページの追加 ビルドディレクトリの変更 Flaskのインストール(バックエンド) Flaskのサンプル作成 404ページの追加 APIの追加 終わりに はじめに 最近のWebアプリはReact.jsやVue.jsを使用したSPAが主流かと思いますが、データ取得のAPIを実装したりなど、サーバサイドの実装も必要になります。 自分はJavascriptに不慣れなのでサーバサイドはJavascriptではなくPythonを使いたかったので、Flaskと共存できる構成にしたかったのがきっかけです。 いろいろと探してみたらすでに先人がやっていました。 Full-stack single page application with Vue.js and Flask Single Page Apps with Vue.js and
信頼できない環境で稼働するアプリケーションには、リトライ処理が不可欠です。 難しくはないので自前で実装してしまうのですが、特定の例外のみリトライしたい・リトライ間隔を指数関数的に増やしたい・リトライ時はログ出力したいなどの細かなリクエストをそれぞれ記述してしまうと、本質的な処理が追いづらくなるので、可能であればライブラリを使って解決したくなります。 tenacity 停止条件 リトライ間隔 リトライ条件 ログ出力 tenacity リトライを簡単に実装するためのPythonライブラリにもいくつかあるのですが、今回は最近でもアップデートされている tenacity を紹介します。類似ライブラリとしてretryやretryingが挙げられますが、いずれも数年以上リリースされていません。 PyPI: https://pypi.org/project/tenacity/ GitHub: https
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く