Advertisement
Woobinda

asyncio init/close db pool.

Nov 25th, 2018
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.19 KB | None | 0 0
  1. Закрытие и init асинхронных драйверов ДБ
  2.  
  3. def init_app(loop):
  4. ....
  5.     app.on_startup.append(init_db)
  6.     app.on_cleanup.append(close_db)
  7. ...
  8.  
  9. async def init_db(app):
  10.     """On startup initial"""
  11.     async def init_mysql(database_conf, db_name):
  12.         try:
  13.             with async_timeout.timeout(2):
  14.                 mysql_db = await aiomysql.create_pool(**database_conf, loop=app.loop, autocommit=True)
  15.                 app[db_name] = mysql_db
  16.                 log.server_logger.info('Successful created pool for %s' % db_name)
  17.         except Exception as e:
  18.             log.server_logger.debug(e)
  19.  
  20.     async def init_postgres(database_conf, db_name):
  21.         # import aiopg
  22.         try:
  23.             with async_timeout.timeout(2):
  24.                 pg_db = await aiopg.create_pool(**database_conf)
  25.                 app[db_name] = pg_db
  26.                 log.server_logger.info('Successful created pool for %s.\n'
  27.                                        'Pool object - %s' % (db_name, pg_db))
  28.         except Exception as e:
  29.             log.server_logger.debug(e)
  30.  
  31.     await init_mysql(app['asterisk_cdr_conf'], db_name='asterisk_cdr')
  32.     await init_mysql(app['asterisk_users_conf'], db_name='asterisk_users')
  33.  
  34.  
  35. async def close_db(app):
  36.     """On app shutdown"""
  37.     async def close(database, db_name):
  38.         if database:
  39.             try:
  40.                 database.close()
  41.             except (AttributeError, KeyError) as e:
  42.                 log.server_logger.info('The %s database was not initialized' % db_name)
  43.                 print('The %s database was not initialized' % db_name)
  44.                 return web.HTTPServiceUnavailable(text='The %s database was not initialized' % db_name)
  45.  
  46.             await database.wait_closed()
  47.             log.server_logger.info('Database %s successfully closed' % db_name)
  48.             print('Database %s successfully closed' % db_name)
  49.  
  50.         else:
  51.             log.server_logger.debug('Empty %s database object' % db_name)
  52.             print('Empty %s database object' % db_name)
  53.  
  54.     await close(app.get('asterisk_cdr', None), db_name='asterisk_cdr')
  55.     await close(app.get('asterisk_users', None), db_name='asterisk_users')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement