我对这个必须修复的WallBoard webapp(Python)有些麻烦,我希望我能清楚问题是什么,所以你很容易理解并帮助我。
因此,该应用程序有3页,主页,呼叫等待,门票。该公司的支持团队使用它来跟踪当天的电话和门票。
因此,当我使用VS Code运行此应用程序时,其行为绝对正常。应用程序记录到另一个网站以检索呼叫信息,而数据库用于检索故障单信息。一段时间后会话到期(检索呼叫信息),但应用程序检测并再次登录。
当我在IIS(8.5)启动应用程序时,每隔17分钟该应用程序就会无缘无故地重新启动,经过几个小时后,我有40到50个谷歌浏览器线程从托管的机器中获取所有内存。 ..
我不相信它是IIS的一个问题,我认为它出于某种原因正在响应,我无法找到答案。
以下是WallBoard App的代码
from datetime import datetime
from flask import Flask, g, render_template
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import pypyodbc as pyodbc
import time
import sys, socket
from funcs import *
from config import *
from querys import *
from cachetools import LRUCache
from apscheduler.schedulers.background import BackgroundScheduler
# Init
app = Flask(__name__)
app.debug = True
# Globals
CALLS_WAITING_CACHE = LRUCache(maxsize=20)
TICKETS_CACHE = LRUCache(maxsize=20)
op = Options()
op.binary_location = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"
op.add_argument("--headless")
op.add_argument("--disable-gpu")
browser = webdriver.Chrome(chrome_options=op, executable_path=r'C:\Python34\Scripts\chromedriver.exe')
with open('log.txt', 'a') as f:
print('Walboard Starting! - ' + str(datetime.now()), file=f)
def login():
# Here i log in to the website where i get calls information
###################################################################
@app.before_request
def before_request():
"""Before Request"""
g.request_start_time = time.time()
g.request_time = lambda: "%.5f" % (time.time() - g.request_start_time)
####################################################################
@app.route('/')
def index():
"""Landing Page"""
return render_template("landing.html",
dashboard_name='TSU WallBoard',
css_folder='/static/css/',
CallsWaiting_Page='/callswaiting',
Tickets_Page='/tickets'
)
####################################################################
def calls_waiting():
# Here i take the information and store in in cache thanks to cachetools
############################################################################
@app.route('/callswaiting')
def calls_wainting_render():
# Here i take information from cache and show it in the webpage of the app
####################################################################
def tickets():
# Here i do the same with tickets, load from DB and store in cache
@app.route('/tickets')
def tickets_render():
# Here i load tickets from cache and show them in Web Page
##########################################################
# Login to avaya website
login()
time.sleep(3)
# Get calls and store in cache
calls_waiting()
# Get tickets and store in cache
tickets()
# Create scheduler obj
sched = BackgroundScheduler(daemon=True)
# Create Jobs
sched.add_job(calls_waiting, 'interval', seconds=refresh_time_calls,
max_instances=1, id='calls_waiting')
sched.add_job(tickets, 'interval', seconds=refresh_time_tickets,
max_instances=1, id='tickets')
# Start scheduler
sched.start()
with open('log.txt', 'a') as f:
print('WallBoard Started! - ' + str(datetime.now()), file=f)
if __name__ == "__main__":
app.run()
所以在这一点上我完全迷失了,我已经做了几个小时的研究,试图找出问题所在,但仍然没有运气。 我拿出里面的代码,因为它太大了,但如果有必要,我可以提供它。 我正在使用PhantomJS,但我总是得到弃用的警告,我决定改变做ChromeDrive,但问题仍然存在。 它可以与BackgroundScheduler一起使用吗?因为我开始认为每次IIS强制重启应用程序时,都会创建更多的作业并且不会杀死其他作业。
我感谢所有的帮助和提示,我很抱歉这篇长篇文章!
我在运行10分钟后拍摄此屏幕,我将在早上更新新照片