2016-12-04 23 views
0

Не могли бы вы рассказать мне, как хранить данные в базе данных для идентификации процесса, запущенного на сервере?Как хранить данные в базе данных для идентификации процесса, запущенного на сервере

Код приведен ниже.

Я запустить его на Колба (питон) с базой данных MySQL на облаке 9.

в отстойник, я не хочу использовать куки сессии для идентификации процесса, но база данных.

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