Guest User

Untitled

a guest
Feb 20th, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1. from apistar import Include, Route
  2. from apistar.frameworks.asyncio import ASyncIOApp as App
  3. from apistar.handlers import docs_urls, static_urls
  4.  
  5. import asyncio
  6. import logging
  7. import random
  8. from time import time
  9.  
  10. logger = logging.getLogger('asyncioapp')
  11. logger.setLevel(logging.DEBUG)
  12. formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  13. ch = logging.StreamHandler()
  14. ch.setFormatter(formatter)
  15. logger.addHandler(ch)
  16.  
  17.  
  18. async def mylogic():
  19. logger.debug('starting welcome')
  20. # a list of resources
  21. resources = list(range(1, 20))
  22. loop = asyncio.get_event_loop()
  23.  
  24. start_time = time()
  25.  
  26. tasks = list()
  27. created = list()
  28. for r in resources:
  29. logger.debug('tasklist adding resource {}'.format(r))
  30. task = worker(r)
  31. tasks.append(task)
  32. created.append(loop.create_task(task))
  33. logger.debug('tasklist added resource {}'.format(r))
  34.  
  35. logger.info('tasklist created')
  36.  
  37. logger.debug('waiting till all tasks complete')
  38. await asyncio.wait(created)
  39.  
  40. retrieved = list()
  41.  
  42. for ongoing in created:
  43. if ongoing.done():
  44. result = ongoing.result()
  45. logger.info(result)
  46. retrieved.append(result)
  47. else:
  48. logger.critical("I shouldn't be here!")
  49.  
  50. results = dict(
  51. time_elapsed=time() - start_time,
  52. results=retrieved
  53. )
  54. return results
  55.  
  56.  
  57. async def worker(resource):
  58. logger.debug('starting resource {}'.format(resource))
  59. sleep_time = random.randint(1, 5)
  60. await asyncio.sleep(sleep_time)
  61. logger.debug('completed resource {}'.format(resource))
  62. return dict(resource=resource, retrieval_time=sleep_time)
  63.  
  64.  
  65. routes = [
  66. Route('/', 'GET', mylogic),
  67. Include('/docs', docs_urls),
  68. Include('/static', static_urls)
  69. ]
  70.  
  71. app = App(routes=routes)
  72.  
  73. if __name__ == '__main__':
  74. app.main()
Add Comment
Please, Sign In to add comment