2016-12-04 62 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

相关问题