2016-12-04 13 views
0

サーバーで開始されたプロセスを識別するためにデータをデータベースに格納する方法を教えてください。サーバーで開始されたプロセスを識別するためにデータベースにデータを格納する方法

コードは以下のとおりです。

は、私は、プロセスが、データベースを識別するために、セッションクッキーを使用したくない、アップ溜めにクラウド9

上のMySQLデータベースとのフラスコ(パイソン)上で実行します。

from multiprocessing import Process 
from time import sleep 

import psutil 
from flask import Flask, redirect, session, url_for 


app = Flask(__name__) 
app.secret_key = 'f\xa9\x85\xf0\xe9\x982\xc4\xf8\xa0k\x91\xa7\xef\x12y' 


@app.route('/') 
def index(): 
    return (
     '<form action="/work/start" method="POST">' 
      '<input type="submit" value="Start">' 
     '</form>' 
     '<form action="/work/stop" method="POST">' 
     '<input type="submit" value="Stop">' 
     '</form>' 
    ) 


def work_it(): 
    while True: 
     print('working...') 
     sleep(1) 

@app.route('/work/start', methods=['POST']) 
def start_work(): 
    if 'work_process' not in session: 
     process = Process(target=work_it) 
     process.start() 
     pid = process.pid 
     parent_pid = psutil.Process(process.pid).parent().pid 
     session['work_process'] = (parent_pid, pid) 
    return redirect(url_for('index')) 


@app.route('/work/stop', methods=['POST']) 
def stop_work(): 
    if 'work_process' in session: 
     parent_pid, pid = session['work_process'] 
     try: 
      process = psutil.Process(pid) 
      if process.parent().pid == parent_pid: 
       process.terminate() 
     except psutil.NoSuchProcess: 
      pass 
     session.pop('work_process') 
    return redirect(url_for('index')) 

答えて

0

サーバーで開始されたプロセスを識別する必要がある理由を説明できますか。 録音する場合のみ。私はあなたがプロセスについての情報を保持しているプロセスをサーバー上で開始する前にレコードを挿入するテーブルを作成できると思います。次に例を示します。INSERT INTO tbl_process(ProcessID、StartedFrom)VALUES( '1'、 'Server')。

私はあなたの質問を誤解しましたか?

+0

停止ボタンを押して終了できるようにしたいと思います。 – Lucas

+0

すでに開始されているときにプロセスを終了できるとは思いません。あなたが本当にそれをしたいのであれば、私にはあなたのための選択肢がありますが、それは最良の解決策ではないかもしれません。 – Cyrus

+0

プロセスに関する情報を保持するテーブルを作成します。プロセスを実行しているときにテーブルを確認してください。ユーザーが停止を押すと、状況をデータベースのキャンセルに更新します。ステータスを5秒ごとに確認するようにコードを修正します(プロセスの経過時間によって異なります)。ステータスが「キャンセル」の場合は例外をスローするか何かを行うと、現在のプロセスが停止します。あまり頻繁にチェックしないでください、私はパフォーマンスの問題があると思う。 – Cyrus

関連する問題