WebHost: split autolaunch and autogen services
This commit is contained in:
parent
3bf367d630
commit
3f20bdaaa2
|
@ -14,7 +14,7 @@ from WebHostLib import app as raw_app
|
||||||
from waitress import serve
|
from waitress import serve
|
||||||
|
|
||||||
from WebHostLib.models import db
|
from WebHostLib.models import db
|
||||||
from WebHostLib.autolauncher import autohost
|
from WebHostLib.autolauncher import autohost, autogen
|
||||||
from WebHostLib.lttpsprites import update_sprites_lttp
|
from WebHostLib.lttpsprites import update_sprites_lttp
|
||||||
from WebHostLib.options import create as create_options_files
|
from WebHostLib.options import create as create_options_files
|
||||||
|
|
||||||
|
@ -45,6 +45,8 @@ if __name__ == "__main__":
|
||||||
create_options_files()
|
create_options_files()
|
||||||
if app.config["SELFLAUNCH"]:
|
if app.config["SELFLAUNCH"]:
|
||||||
autohost(app.config)
|
autohost(app.config)
|
||||||
|
if app.config["SELFGEN"]:
|
||||||
|
autogen(app.config)
|
||||||
if app.config["SELFHOST"]: # using WSGI, you just want to run get_app()
|
if app.config["SELFHOST"]: # using WSGI, you just want to run get_app()
|
||||||
if app.config["DEBUG"]:
|
if app.config["DEBUG"]:
|
||||||
autohost(app.config)
|
autohost(app.config)
|
||||||
|
|
|
@ -22,9 +22,10 @@ Pony(app)
|
||||||
app.jinja_env.filters['any'] = any
|
app.jinja_env.filters['any'] = any
|
||||||
app.jinja_env.filters['all'] = all
|
app.jinja_env.filters['all'] = all
|
||||||
|
|
||||||
app.config["SELFHOST"] = True
|
app.config["SELFHOST"] = True # application process is in charge of running the websites
|
||||||
app.config["GENERATORS"] = 8 # maximum concurrent world gens
|
app.config["GENERATORS"] = 8 # maximum concurrent world gens
|
||||||
app.config["SELFLAUNCH"] = True
|
app.config["SELFLAUNCH"] = True # application process is in charge of launching Rooms.
|
||||||
|
app.config["SELFGEN"] = True # application process is in charge of scheduling Generations.
|
||||||
app.config["DEBUG"] = False
|
app.config["DEBUG"] = False
|
||||||
app.config["PORT"] = 80
|
app.config["PORT"] = 80
|
||||||
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
|
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
|
||||||
|
|
|
@ -110,6 +110,26 @@ def autohost(config: dict):
|
||||||
def keep_running():
|
def keep_running():
|
||||||
try:
|
try:
|
||||||
with Locker("autohost"):
|
with Locker("autohost"):
|
||||||
|
while 1:
|
||||||
|
time.sleep(0.1)
|
||||||
|
with db_session:
|
||||||
|
rooms = select(
|
||||||
|
room for room in Room if
|
||||||
|
room.last_activity >= datetime.utcnow() - timedelta(days=3))
|
||||||
|
for room in rooms:
|
||||||
|
launch_room(room, config)
|
||||||
|
|
||||||
|
except AlreadyRunningException:
|
||||||
|
logging.info("Autohost reports as already running, not starting another.")
|
||||||
|
|
||||||
|
import threading
|
||||||
|
threading.Thread(target=keep_running, name="AP_Autohost").start()
|
||||||
|
|
||||||
|
|
||||||
|
def autogen(config: dict):
|
||||||
|
def keep_running():
|
||||||
|
try:
|
||||||
|
with Locker("autogen"):
|
||||||
|
|
||||||
with multiprocessing.Pool(config["GENERATORS"], initializer=init_db,
|
with multiprocessing.Pool(config["GENERATORS"], initializer=init_db,
|
||||||
initargs=(config["PONY"],)) as generator_pool:
|
initargs=(config["PONY"],)) as generator_pool:
|
||||||
|
@ -129,22 +149,17 @@ def autohost(config: dict):
|
||||||
select(generation for generation in Generation if generation.state == STATE_ERROR).delete()
|
select(generation for generation in Generation if generation.state == STATE_ERROR).delete()
|
||||||
|
|
||||||
while 1:
|
while 1:
|
||||||
time.sleep(0.50)
|
time.sleep(0.1)
|
||||||
with db_session:
|
with db_session:
|
||||||
rooms = select(
|
|
||||||
room for room in Room if
|
|
||||||
room.last_activity >= datetime.utcnow() - timedelta(days=3))
|
|
||||||
for room in rooms:
|
|
||||||
launch_room(room, config)
|
|
||||||
to_start = select(
|
to_start = select(
|
||||||
generation for generation in Generation if generation.state == STATE_QUEUED)
|
generation for generation in Generation if generation.state == STATE_QUEUED)
|
||||||
for generation in to_start:
|
for generation in to_start:
|
||||||
launch_generator(generator_pool, generation)
|
launch_generator(generator_pool, generation)
|
||||||
except AlreadyRunningException:
|
except AlreadyRunningException:
|
||||||
pass
|
logging.info("Autogen reports as already running, not starting another.")
|
||||||
|
|
||||||
import threading
|
import threading
|
||||||
threading.Thread(target=keep_running).start()
|
threading.Thread(target=keep_running, name="AP_Autogen").start()
|
||||||
|
|
||||||
|
|
||||||
multiworlds = {}
|
multiworlds = {}
|
||||||
|
|
Loading…
Reference in New Issue