前提・実現したいこと
標題のようにPython3のBottleでバックグラウンド処理がしたいと考えております。
PythonのBottleでbackground taskを処理する を参考にしようとして、記載されているサンプルを自前のサーバー上で動かそうとしたのですが上手く行きません。
発生している問題・エラーメッセージ
前述のサイトの例のように1つ目のブラウザーは /run に、2つ目も /run に、3つ目は / に順にアクセスすると、1つ目の処理が終わってから2つ目の処理が実行され(ここまでは正しい)、2つ目の処理が終わってから3つ目が処理されてしまいます。
とくにエラーメッセージは出ませんでした。
該当のソースコード
使用したコードは以下のとおりで、前述のサイトのサンプルとの変更点は、1行目にshebangを追加したこと、末尾のrunのhostをlocalhostから0.0.0.0にした2点です。
Python3
1#!/usr/bin/env python3 2 3import datetime 4import multiprocessing 5import time 6 7from bottle import Bottle, run 8 9app = Bottle() 10app.process = None 11 12 13def task(): 14 time.sleep(10) 15 16 17def start_task(): 18 if app.process: 19 return False 20 app.process = multiprocessing.Process(target=task) 21 app.process.start() 22 app.process.join() 23 app.process = None 24 return True 25 26 27@app.route('/') 28def index(): 29 dt = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') 30 return f'index<br>{dt}' 31 32 33@app.route('/run') 34def run_task(): 35 start_dt = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') 36 response = start_task() 37 end_dt = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') 38 return f"task complete. <br>Status={response}<br>start={start_dt}<br>end={end_dt}" 39 40 41if __name__ == '__main__': 42 run(app, host='0.0.0.0', port=8001)
試したこと
Bottleなしでmultiprocessingを使ったサンプルを動かしてみましたが、こちらは正しくバックグラウンド処理ができていることを確認しております。
補足情報(FW/ツールのバージョンなど)
自前で用意したサーバーは、Debian(Buster)、Python3のバージョンは3.7.3、Bottleのバージョンは0.12.15です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/15 09:02
2021/04/15 09:05
2021/04/15 23:53 編集