mirror of https://github.com/janLo/punkow
Integrate the timer in the service
This commit is contained in:
parent
f3763a3d29
commit
1506e2bc63
|
|
@ -6,7 +6,7 @@ import logging
|
||||||
import uvloop
|
import uvloop
|
||||||
import click
|
import click
|
||||||
|
|
||||||
from punkow.service import interface, model, worker
|
from punkow.service import interface, model, worker, timer
|
||||||
|
|
||||||
|
|
||||||
@click.command()
|
@click.command()
|
||||||
|
|
@ -15,7 +15,9 @@ from punkow.service import interface, model, worker
|
||||||
@click.option("--db", default="sqlite:////tmp/punkow.db", help="The database uri")
|
@click.option("--db", default="sqlite:////tmp/punkow.db", help="The database uri")
|
||||||
@click.option("--interval", default=50 * 5, type=int, help="The interval in which the worker should operate")
|
@click.option("--interval", default=50 * 5, type=int, help="The interval in which the worker should operate")
|
||||||
@click.option("--debug", is_flag=True, help="Run in debug mode")
|
@click.option("--debug", is_flag=True, help="Run in debug mode")
|
||||||
def main(host, port, db, interval, debug):
|
@click.option("--tz", default="CET", help="Timezone to use for special times")
|
||||||
|
@click.option("--special", help="special time where the interval should be increased", multiple=True)
|
||||||
|
def main(host, port, db, interval, debug, tz, special):
|
||||||
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
|
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
|
||||||
|
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
|
|
@ -33,7 +35,9 @@ def main(host, port, db, interval, debug):
|
||||||
db_mngr = model.DatabaseManager(db)
|
db_mngr = model.DatabaseManager(db)
|
||||||
db_mngr.create_schema()
|
db_mngr.create_schema()
|
||||||
|
|
||||||
wrk = worker.Worker(loop, db_mngr, interval=interval, debug=debug)
|
tm = timer.Timer(interval=interval, special_times=special, time_zone=tz)
|
||||||
|
|
||||||
|
wrk = worker.Worker(loop, db_mngr, tm=tm, debug=debug)
|
||||||
loop.create_task(wrk.run())
|
loop.create_task(wrk.run())
|
||||||
|
|
||||||
app = interface.App(db_mngr)
|
app = interface.App(db_mngr)
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import typing
|
||||||
from sqlalchemy import func
|
from sqlalchemy import func
|
||||||
from sqlalchemy.orm import joinedload
|
from sqlalchemy.orm import joinedload
|
||||||
|
|
||||||
from . import model
|
from . import model, timer
|
||||||
from .. import scraper
|
from .. import scraper
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
@ -72,10 +72,10 @@ def _book(target: str, reqs: typing.List[_WorkerRequest], debug=False) -> typing
|
||||||
|
|
||||||
class Worker(object):
|
class Worker(object):
|
||||||
|
|
||||||
def __init__(self, loop: asyncio.AbstractEventLoop, db: model.DatabaseManager, interval=5 * 60, debug=True):
|
def __init__(self, loop: asyncio.AbstractEventLoop, db: model.DatabaseManager, tm: timer.Timer, debug=True):
|
||||||
self._loop = loop
|
self._loop = loop
|
||||||
self._db = db
|
self._db = db
|
||||||
self._interval = interval
|
self._timer = tm
|
||||||
self._debug = debug
|
self._debug = debug
|
||||||
self._executor = concurrent.futures.ProcessPoolExecutor(max_workers=1)
|
self._executor = concurrent.futures.ProcessPoolExecutor(max_workers=1)
|
||||||
|
|
||||||
|
|
@ -150,10 +150,5 @@ class Worker(object):
|
||||||
|
|
||||||
async def run(self):
|
async def run(self):
|
||||||
while True:
|
while True:
|
||||||
start = datetime.datetime.utcnow()
|
with self._timer.timed():
|
||||||
await self._run_once()
|
await self._run_once()
|
||||||
end = datetime.datetime.utcnow()
|
|
||||||
elapsed = (end - start).total_seconds()
|
|
||||||
sleep = max(0.0, self._interval - elapsed)
|
|
||||||
logger.debug("Booking run completed in %0.2f seconds - now sleep for %0.2f seconds", elapsed, sleep)
|
|
||||||
await asyncio.sleep(sleep)
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue