Fixed long time issues
A failed attempt to reload gunicorn on html change (so now it's just a draft) Fixed incompatibility with reload = False Now we catch the lock getting error instead of just raising it!
This commit is contained in:
parent
9ee0798006
commit
386fc21f29
|
|
@ -3,6 +3,7 @@ from django.conf import settings
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
|
|
||||||
import os, pathlib, importlib, types
|
import os, pathlib, importlib, types
|
||||||
|
import re
|
||||||
import tomllib
|
import tomllib
|
||||||
|
|
||||||
class AsyncronConfig(AppConfig):
|
class AsyncronConfig(AppConfig):
|
||||||
|
|
@ -19,6 +20,8 @@ class AsyncronConfig(AppConfig):
|
||||||
#if settings.DEBUG:
|
#if settings.DEBUG:
|
||||||
# os.environ['PYTHONASYNCIODEBUG'] = "1"
|
# os.environ['PYTHONASYNCIODEBUG'] = "1"
|
||||||
|
|
||||||
|
#self.watch_templates_for_reload() Does not Work Rn.
|
||||||
|
|
||||||
self.load_model_auxilaries()
|
self.load_model_auxilaries()
|
||||||
self.load_extensions()
|
self.load_extensions()
|
||||||
|
|
||||||
|
|
@ -41,6 +44,23 @@ class AsyncronConfig(AppConfig):
|
||||||
loader = importlib.machinery.SourceFileLoader( f"{app.name}.{name}", str(import_file) )
|
loader = importlib.machinery.SourceFileLoader( f"{app.name}.{name}", str(import_file) )
|
||||||
loader.exec_module( types.ModuleType(loader.name) )
|
loader.exec_module( types.ModuleType(loader.name) )
|
||||||
|
|
||||||
|
def watch_templates_for_reload( self ):
|
||||||
|
from .gunicorn import post_fork
|
||||||
|
if not hasattr(post_fork, 'worker'): return
|
||||||
|
if not post_fork.worker.reloader: return
|
||||||
|
if not any( tconf.get('APP_DIRS', False) for tconf in settings.TEMPLATES ): return
|
||||||
|
|
||||||
|
for app in apps.get_app_configs():
|
||||||
|
app_templates_dir = pathlib.Path(app.path) / "templates"
|
||||||
|
if not app_templates_dir.exists(): continue
|
||||||
|
for dirpath, dirnames, filenames in app_templates_dir.walk():
|
||||||
|
print("D:", dirpath, dirnames, filenames )
|
||||||
|
post_fork.worker.reloader.add_extra_file( dirpath )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def load_model_auxilaries( self ):
|
def load_model_auxilaries( self ):
|
||||||
"""
|
"""
|
||||||
Loads auxilary (passive) data from the models.toml file of each app.
|
Loads auxilary (passive) data from the models.toml file of each app.
|
||||||
|
|
|
||||||
|
|
@ -20,11 +20,12 @@ def post_fork( server, worker ): #worker and AsyncronWorker, pay attention!
|
||||||
AsyncronWorker.MAX_COUNT = 1
|
AsyncronWorker.MAX_COUNT = 1
|
||||||
AsyncronWorker.override_exit_signals()
|
AsyncronWorker.override_exit_signals()
|
||||||
|
|
||||||
to_override = worker.reloader._callback
|
if worker.reloader: #So if reload = True
|
||||||
def new_callback(*args, **kwargs):
|
to_override = worker.reloader._callback
|
||||||
AsyncronWorker.stop( reason = "Auto Reload" )
|
def new_callback(*args, **kwargs):
|
||||||
return to_override(*args, **kwargs)
|
AsyncronWorker.stop( reason = "Auto Reload" )
|
||||||
worker.reloader._callback = new_callback
|
return to_override(*args, **kwargs)
|
||||||
|
worker.reloader._callback = new_callback
|
||||||
|
|
||||||
return init_to_override( *args, **kwargs )
|
return init_to_override( *args, **kwargs )
|
||||||
AsyncronWorker.init = init
|
AsyncronWorker.init = init
|
||||||
|
|
|
||||||
|
|
@ -357,10 +357,12 @@ class AsyncronWorker:
|
||||||
|
|
||||||
async for task in Ts:
|
async for task in Ts:
|
||||||
|
|
||||||
locked = await Task.objects.filter( id = task.id ).filter(
|
try:
|
||||||
models.Q(worker_lock = None) |
|
locked = await Task.objects.filter( id = task.id ).filter(
|
||||||
models.Q(worker_lock = self.model) #This is incase the lock has been aquired for some reason before.
|
models.Q(worker_lock = None) |
|
||||||
).aupdate( worker_lock = self.model )
|
models.Q(worker_lock = self.model) #This is incase the lock has been aquired for some reason before.
|
||||||
|
).aupdate( worker_lock = self.model )
|
||||||
|
except IntegrityError: continue
|
||||||
if not locked: continue
|
if not locked: continue
|
||||||
|
|
||||||
trace = task.new_trace()
|
trace = task.new_trace()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user