2016-12-04 22 views
0

您能否告訴我如何將數據存儲在數據庫中以標識服務器上啓動的進程?如何將數據存儲在數據庫中以識別在服務器上啓動的進程

代碼如下。

我對瓶(蟒蛇)與MySQL數據庫雲9

運行油底殼,我不想使用會話cookie來識別的過程,而是一個數據庫。

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

相關問題