如何创建一个永远运行的后台任务-Python FlaskSQLAlchemy
我想创建一个永远运行的简单后台任务。我将找到一种方法,在Flask中编写web应用程序的同时启动它 到目前为止,我得到的是:如何创建一个永远运行的后台任务-Python FlaskSQLAlchemy,python,multithreading,flask,sqlalchemy,Python,Multithreading,Flask,Sqlalchemy,我想创建一个永远运行的简单后台任务。我将找到一种方法,在Flask中编写web应用程序的同时启动它 到目前为止,我得到的是: import threading from app.models import SkillTracker, UserAttributes from flask_sqlalchemy import SQLAlchemy from app import db import time, math class SkillTimer(threading.Thread, Skill
import threading
from app.models import SkillTracker, UserAttributes
from flask_sqlalchemy import SQLAlchemy
from app import db
import time, math
class SkillTimer(threading.Thread, SkillTracker):
def __init__(self, SkillTracker=SkillTracker):
threading.Thread.__init__(self)
self.skillcheck = SkillTracker.query.filter_by(isactive=1).all()
def run(self):
# for x in range(1, 1+1):
# if x%1 == 0:
# print(x)
# #print(x)
time.sleep(1)
self.skillcheck = SkillTracker.query.filter_by(isactive=1).all()
if self.skillcheck != []:
print(self.skillcheck)
for record in self.skillcheck:
if record.isactive == 1:
if record.timesubmit + record.timetowait <= time.time():
user = UserAttributes.query.filter_by(user_id=record.userid).first()
if record.targetskill == 'int':
record.isactive = 0
user.intelligence += 1
db.session.commit()
print('User {} upgraded {}, level = {} -- {}'.format(user.user_id, record.targetskill,
user.intelligence, time.time()))
if record.targetskill == 'end':
record.isactive = 0
user.endurance += 1
db.session.commit()
print('User {} upgraded {}, level = {} -- {}'.format(user.user_id, record.targetskill,
user.endurance, time.time()))
if record.targetskill == 'str':
record.isactive = 0
user.strength += 1
db.session.commit()
print('User {} upgraded {}, level = {} -- {}'.format(user.user_id, record.targetskill,
user.strength, time.time()))
else:
pass
self.skillcheck = None
skilltime = SkillTimer()
skilltime.run()
#while True:
skilltime = SkillTimer()
skilltime.run()
#skilltimer.run()
导入线程
从app.models导入SkillTracker、UserAttributes
从flask_sqlalchemy导入sqlalchemy
从应用程序导入数据库
输入时间、数学
类SkillTimer(threading.Thread,SkillTracker):
定义初始化(self,SkillTracker=SkillTracker):
threading.Thread.\uuuuu init\uuuuuu(自)
self.skillcheck=SkillTracker.query.filter_by(isactive=1).all()
def运行(自):
#对于范围(1,1+1)内的x:
#如果x%1==0:
#打印(x)
##打印(x)
时间。睡眠(1)
self.skillcheck=SkillTracker.query.filter_by(isactive=1).all()
如果自我技能检查!=[]:
打印(自我技能检查)
有关self.skillcheck中的记录:
如果record.isactive==1:
如果record.timesubmit+record.timetowait我会这样更改它:
import threading
from app.models import SkillTracker, UserAttributes
from flask_sqlalchemy import SQLAlchemy
from app import db
import time, math
class SkillTimer(threading.Thread, SkillTracker):
def __init__(self, SkillTracker=SkillTracker):
threading.Thread.__init__(self)
self.skillcheck = SkillTracker.query.filter_by(isactive=1).all()
def run(self):
while True:
time.sleep(1)
self.skillcheck = SkillTracker.query.filter_by(isactive=1).all()
if self.skillcheck != []:
print(self.skillcheck)
for record in self.skillcheck:
if record.isactive == 1:
if record.timesubmit + record.timetowait <= time.time():
user = UserAttributes.query.filter_by(user_id=record.userid).first()
if record.targetskill == 'int':
record.isactive = 0
user.intelligence += 1
db.session.commit()
print('User {} upgraded {}, level = {} -- {}'.format(user.user_id, record.targetskill,
user.intelligence, time.time()))
if record.targetskill == 'end':
record.isactive = 0
user.endurance += 1
db.session.commit()
print('User {} upgraded {}, level = {} -- {}'.format(user.user_id, record.targetskill,
user.endurance, time.time()))
if record.targetskill == 'str':
record.isactive = 0
user.strength += 1
db.session.commit()
print('User {} upgraded {}, level = {} -- {}'.format(user.user_id, record.targetskill,
user.strength, time.time()))
else:
pass
self.skillcheck = None
skilltime = SkillTimer()
skilltime.run()
导入线程
从app.models导入SkillTracker、UserAttributes
从flask_sqlalchemy导入sqlalchemy
从应用程序导入数据库
输入时间、数学
类SkillTimer(threading.Thread,SkillTracker):
定义初始化(self,SkillTracker=SkillTracker):
threading.Thread.\uuuuu init\uuuuuu(自)
self.skillcheck=SkillTracker.query.filter_by(isactive=1).all()
def运行(自):
尽管如此:
时间。睡眠(1)
self.skillcheck=SkillTracker.query.filter_by(isactive=1).all()
如果自我技能检查!=[]:
打印(自我技能检查)
有关self.skillcheck中的记录:
如果record.isactive==1:
如果record.timesubmit+record.timetowait现在运行此命令,则如果我们达到~950个递归,将通知您。如果我们能做到这一点,我相信问题可以归结为一次线程的数量或者类似的问题。将让您知道并接受这是否解决了问题:)谢谢您的建议。到目前为止还不错。我想你已经解决了。谢谢@codeglow会接受你的回答。
import threading
from app.models import SkillTracker, UserAttributes
from flask_sqlalchemy import SQLAlchemy
from app import db
import time, math
class SkillTimer(threading.Thread, SkillTracker):
def __init__(self, SkillTracker=SkillTracker):
threading.Thread.__init__(self)
self.skillcheck = SkillTracker.query.filter_by(isactive=1).all()
def run(self):
while True:
time.sleep(1)
self.skillcheck = SkillTracker.query.filter_by(isactive=1).all()
if self.skillcheck != []:
print(self.skillcheck)
for record in self.skillcheck:
if record.isactive == 1:
if record.timesubmit + record.timetowait <= time.time():
user = UserAttributes.query.filter_by(user_id=record.userid).first()
if record.targetskill == 'int':
record.isactive = 0
user.intelligence += 1
db.session.commit()
print('User {} upgraded {}, level = {} -- {}'.format(user.user_id, record.targetskill,
user.intelligence, time.time()))
if record.targetskill == 'end':
record.isactive = 0
user.endurance += 1
db.session.commit()
print('User {} upgraded {}, level = {} -- {}'.format(user.user_id, record.targetskill,
user.endurance, time.time()))
if record.targetskill == 'str':
record.isactive = 0
user.strength += 1
db.session.commit()
print('User {} upgraded {}, level = {} -- {}'.format(user.user_id, record.targetskill,
user.strength, time.time()))
else:
pass
self.skillcheck = None
skilltime = SkillTimer()
skilltime.run()