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'))
我想識別它,以便能夠通過按停止按鈕 – Lucas
終止它我不認爲你可以終止進程,當他們已經開始。如果你真的想要這樣做,我有替代方案,但它可能不是最好的解決方案。 – Cyrus
創建一個表,其中包含有關該過程的信息。運行過程時請檢查表格。如果用戶按停止,則將狀態更新爲取消數據庫。修改您的代碼以每5秒檢查一次狀態(這取決於您的進程的時間長短)。如果狀態爲「取消」,則拋出異常或執行某些操作將停止當前進程。不要太頻繁地檢查它,我認爲會有性能問題。 – Cyrus