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 click
|
||||
|
||||
from punkow.service import interface, model, worker
|
||||
from punkow.service import interface, model, worker, timer
|
||||
|
||||
|
||||
@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("--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")
|
||||
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())
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
|
|
@ -33,7 +35,9 @@ def main(host, port, db, interval, debug):
|
|||
db_mngr = model.DatabaseManager(db)
|
||||
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())
|
||||
|
||||
app = interface.App(db_mngr)
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import typing
|
|||
from sqlalchemy import func
|
||||
from sqlalchemy.orm import joinedload
|
||||
|
||||
from . import model
|
||||
from . import model, timer
|
||||
from .. import scraper
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
|
@ -72,10 +72,10 @@ def _book(target: str, reqs: typing.List[_WorkerRequest], debug=False) -> typing
|
|||
|
||||
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._db = db
|
||||
self._interval = interval
|
||||
self._timer = tm
|
||||
self._debug = debug
|
||||
self._executor = concurrent.futures.ProcessPoolExecutor(max_workers=1)
|
||||
|
||||
|
|
@ -150,10 +150,5 @@ class Worker(object):
|
|||
|
||||
async def run(self):
|
||||
while True:
|
||||
start = datetime.datetime.utcnow()
|
||||
with self._timer.timed():
|
||||
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