繁体   English   中英

如何在烧瓶中进行无限循环

[英]How to make an endless loop in flask

from flask import *
from redmine import Redmine
import sys

app = Flask(__name__)


REDMINE_KEY='sdfsdfsdfsdfsd'
REDMINE_URL='http://blabla/redmine'


redmine = Redmine(REDMINE_URL)
redmine = Redmine(REDMINE_URL, key=REDMINE_KEY)

neu = []
bearbeitung = []
erledigt = []

id_thema = ""
thema = ""
project = ""
zugewiesen = ""

def ticket_zugewiesen(diesTicket):
    alleticket = redmine.issue.get(diesTicket)
    try:
        alleticket.assigned_to
    except:
        return True


def ticket_infos(diesTicket):
    alleticket = redmine.issue.get(diesTicket)
    try:
        id_thema = alleticket.id
        thema = alleticket.subject
        project = alleticket.project.name
        zugewiesen = alleticket.assigned_to
    except:
        id_thema = alleticket.id
        thema = alleticket.subject
        project = alleticket.project.name

    return

neueIssues = redmine.issue.filter(status_id='1')
for i in neueIssues:
    neu.append(i.id)

neueIssues = redmine.issue.filter(status_id='2')
for i in neueIssues:
    bearbeitung.append(i.id)

neueIssues = redmine.issue.filter(status_id='5')
for i in neueIssues:
    erledigt.append(i.id)



@app.route('/_sendinfo')
def info():
    return jsonify(result=id_thema,thema=thema, project=project, zugewiesen=zugewiesen)

@app.route('/')
def home():
    while True:
        neu2 = []
        bearbeitung2 = []
        erledigt2 = []

        neueIssues = redmine.issue.filter(status_id='1')
        for neues in neueIssues:
            neu2.append(neues.id)

        neueIssues = redmine.issue.filter(status_id='2')
        for bearbeitetes in neueIssues:
            bearbeitung2.append(bearbeitetes.id)

        neueIssues = redmine.issue.filter(status_id='5')
        for erledigtes in neueIssues:
            erledigt2.append(erledigtes.id)

        for i in neu2:
            if i not in neu:
                janein = ticket_zugewiesen(i)
                if janein is True:
                    l = ticket_infos(i)
                else:
                    pass

        neu = neu2

        for ii in bearbeitung2:
            if ii not in bearbeitung:
                if ii in erledigt:
                    l = ticket_infos(ii)
                    erledigt = erledigt2
        bearbeitung = bearbeitung2

        for iii in erledigt2:
            if iii not in erledigt:
                l = ticket_infos(iii)
        erledigt = erledigt2
    return render_template("index.html")

if __name__ == '__main__':
    app.run()

我怎样才能使home()这个无限循环在烧瓶中工作? 现在不起作用。 还是有更好的方法从Redmine获取数据?

我将每轮检查一次是否有无限循环,如果neu2,bearbeitung2,erledigt2这三个列表等于neu,bearbeitung,erledigt。 如果“ list2”中还有更多数字,我将在前端(浏览器)上动态显示一些信息。

如果我对您的理解正确,则希望继续从一条Flask路由向浏览器推送更新。 可悲的是,那是不可能的。 您将需要研究使用浏览器端的JavaScript,并使用AJAX或websocket进行轮询以推送实时更新。

在AJAX和WS之间进行选择取决于您的特定用例。 尝试同时研究两者。 AJAX可能更容易设置,但是据我所知Flask有一些WS支持: https : //github.com/miguelgrinberg/Flask-SocketIO

编辑:如果您不需要支持旧的浏览器(尽管似乎有polyfill,它也提供旧浏览器的支持),您也可以尝试使用服务器发送的事件。 它们在这里得到了很好的解释: 如何在Flask框架中实现服务器推送? 尽管我从未亲自尝试过,但它似乎真的很容易使用。

我不知道这是否是个好主意,但我解决了。

from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(1) # number of executor
executor.submit(home) 
from concurrent.futures import ThreadPoolExecutor

from flask import *
from redmine import Redmine
import sys

app = Flask(__name__)


REDMINE_KEY='sdfsdfsdfsdfsd'
REDMINE_URL='http://blabla/redmine'


redmine = Redmine(REDMINE_URL)
redmine = Redmine(REDMINE_URL, key=REDMINE_KEY)

neu = []
bearbeitung = []
erledigt = []

id_thema = ""
thema = ""
project = ""
zugewiesen = ""

def ticket_zugewiesen(diesTicket):
    alleticket = redmine.issue.get(diesTicket)
    try:
        alleticket.assigned_to
    except:
        return True


def ticket_infos(diesTicket):
    alleticket = redmine.issue.get(diesTicket)
    try:
        id_thema = alleticket.id
        thema = alleticket.subject
        project = alleticket.project.name
        zugewiesen = alleticket.assigned_to
    except:
        id_thema = alleticket.id
        thema = alleticket.subject
        project = alleticket.project.name

    return

neueIssues = redmine.issue.filter(status_id='1')
for i in neueIssues:
    neu.append(i.id)

neueIssues = redmine.issue.filter(status_id='2')
for i in neueIssues:
    bearbeitung.append(i.id)

neueIssues = redmine.issue.filter(status_id='5')
for i in neueIssues:
    erledigt.append(i.id)



@app.route('/_sendinfo')
def info():
    return jsonify(result=id_thema,thema=thema, project=project, zugewiesen=zugewiesen)

executor = ThreadPoolExecutor(1) # number of executor

def home():
    while True:
        neu2 = []
        bearbeitung2 = []
        erledigt2 = []

        neueIssues = redmine.issue.filter(status_id='1')
        for neues in neueIssues:
            neu2.append(neues.id)

        neueIssues = redmine.issue.filter(status_id='2')
        for bearbeitetes in neueIssues:
            bearbeitung2.append(bearbeitetes.id)

        neueIssues = redmine.issue.filter(status_id='5')
        for erledigtes in neueIssues:
            erledigt2.append(erledigtes.id)

        for i in neu2:
            if i not in neu:
                janein = ticket_zugewiesen(i)
                if janein is True:
                    l = ticket_infos(i)
                else:
                    pass

        neu = neu2

        for ii in bearbeitung2:
            if ii not in bearbeitung:
                if ii in erledigt:
                    l = ticket_infos(ii)
                    erledigt = erledigt2
        bearbeitung = bearbeitung2

        for iii in erledigt2:
            if iii not in erledigt:
                l = ticket_infos(iii)
        erledigt = erledigt2
    return render_template("index.html")


if __name__ == '__main__':
    executor.submit(home) 
    app.run()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM