Python前記事までに書ききれなかった話題をちょっと続けます。サーバの常駐と停止bottleを使っていて実際に常駐させておこうとすると、起動・停止方法が悩みどころです。bottle.run()を呼ぶと、基本的にはコンソールでCtrl+Cを入力してプロセスを中止するまでそのままです。SSHのセッションを切ると停止するので、繋ぎっぱなしにしなければいけないの?ってなります。サーバのバックグラウンド実行Bottledaemonなどモジュールを別途インストールしたり、サービスとして設定することで、デーモン化する方法もあるようですが、「一つのファイルで動く」というbottle.py本来の良さをどんどん失っているような気も。SSHを切った後もバックグラウンドで動かすだけならnohupで充分でしょう。&上のコマンドはnohupでバックグラウンド実行しつつ、標準出力(stdout)をログファイル(server.logという名前)にリダイレクトするものです。これでSSHのセッションを閉じてもサーバが動き続けます。uを使えば、バックグラウンドで立ち上がっているプロセスやそのPIDが確認できます。7609がBottleを実行しているプロセスですね。uサーバの停止nohupでバックグラウンド実行させた後、不要になれば停止したいのですが、これもよくあるPythonスクリプトとは違った癖があります。スクリプトを止める常套手段、例えばsys.exit()を使っても、bottle側で例外を握りつぶすので停止しません。WGSIサーバにはサーバをシャットダウンするインタフェース(メソッド)が用意されているようですが、ネットで調べるとbottle.pyのクラスを継承して、、、とか面倒なことが書いてあります。シンプルなのはおそらく、ふだんnohupで起動したプロセスを止める時のように、単純にプロセスをkillするやり方でしょう。以下は、ブラウザからサーバを停止できるように、route.pyにルーティングとして追加する例です。この例では/stopページを踏むと自プロセスを中止する実装になっています。signal.SIGTERM)クライアントの作成Webページと違ってAPIのテストとなると、リクエスト(今回はJSON形式)を整形するなど、単にブラウザで表示をチェックしてOK、というわけにはいきませんね。APIをテストするための拡張機能がありますが、パターンを増やそうとすると手動ではツラいものがあります。サーバの実装に合わせて、Pythonで作ってしまいましょう。urllib2など色々なライブラリがありますが、増改築を重ねた経歴からやや使いにくい印象。別途インストールが必要なものの、requestsモジュールを使えば記述がシンプルになります。いつものごとくpipを使って簡単にインストールできます。requestsrequestsモジュールの使用例(GET)前記事までに作成したサーバはJSONを解釈する仕様ですので、ここでのAPIリクエストはJSONデータをボディとして送信します。requests.get()メソッドを使ったGetリクエストの例です。対象のURLに対して単純にgetメソッドを使用すると、レスポンスが返ってくるまで同期的に待機し、返り値を調べることでレスポンスを取得できます。status_codeプロパティにHTTPレスポンスコードがセットされているので、これを調べることでAPIの処理が成功したか否かを調べます。通常はrequests.code.ok(実体は200、整数型(int))が期待通りの動作で、それ以外のステータスコードはエラーやタイムアウト(サーバと通信ができなかった場合)を表します。requests経由で受信したJSONデータは、.json()メソッドを使えばそのままオブジェクトとして取り出すことができます。何らかの理由でJSONデータがセットされていない場合は例外が発生します。DELETE..)でも同じです。res.json()requestsモジュールの使用例(POST)Postリクエストの例も記載します。/api?(key)=(value)の形式)としてエンコードされます。リクエストにセットするJSONデータ(リスト、辞書またはそれらがネストされたオブジェクト)は、あらかじめJSON文字列に変換しておきます(json.dumps(object)メソッド)。合わせてJSONデータであることを明示するためのヘッダ('application/json')をセットしますが、やり方はクエリパラメータと同じく辞書型を渡すだけです。usta関連記事Pythonを使ってWordPressに投稿するみんな大好きWordpressはCMS/ブログアプリケーションの有名な実装例、ですが、APIを使って管理できるとちょっとしたときに便利です。ServiceはAzureのPaaS環境。Appsは、VMまでは必要な...記事を読むdatetimeモジュールによる時刻の扱いどのプログラミング言語/スクリプトでも、時刻と文字列の変換は頻出の処理ですね。(関連設定の取得・設定変更)別記事の続きです。ここではポートフォワードの設定や仮想メディアの情報取得について書いておきます。完成形のサンプルは最後に掲載します。...記事を読むthreadingモジュールでマルチスレッド処理Pythonは基本的に同期・シリアル実行ですが、threadingモジュールを使うと、複数のスレッドを立ち上げて非同期に処理させることが...記事を読むPythonでMongoDBにアクセスするMongoDBはスキーマ定義が柔軟なドキュメント指向のデータベース。(セットアップ~VM電源操作)仮想マシン環境と言えば色々ありますが、個人的にはVirtualBoxがPC環境でも使いやすいと思っています。安定性や品質、機能面では他の仮想...記事を読むInfluxDBとGrafanaで作るサーバ監視環境Grafanaはデータの視覚化ツールとして人気ですね。今回はInfluxDBをデータソースとして性能監視環境を構築した際のメモです。...記事を読むElasticsearchをセットアップするElasticsearchは全文検索エンジン。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。