Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.21 KB | None | 0 0
  1. # asyncio_executor_process.py
  2.  
  3. import asyncio
  4. import concurrent.futures
  5. import logging
  6. import sys
  7. import time
  8.  
  9. def blocks(n):
  10. log = logging.getLogger('blocks({})'.format(n))
  11. log.info('running')
  12. time.sleep(0.1)
  13. log.info('done')
  14. return n ** 2
  15.  
  16.  
  17. async def run_blocking_tasks(executor):
  18. log = logging.getLogger('run_blocking_tasks')
  19. log.info('starting')
  20.  
  21. log.info('creating executor tasks')
  22. loop = asyncio.get_event_loop()
  23. blocking_tasks = [
  24. loop.run_in_executor(executor, blocks, i)
  25. for i in range(6)
  26. ]
  27. log.info('waiting for executor tasks')
  28. completed, pending = await asyncio.wait(blocking_tasks)
  29. results = [t.result() for t in completed]
  30. log.info('results: {!r}'.format(results))
  31.  
  32. log.info('exiting')
  33.  
  34. # Configure logging to show the name of the thread where the log message originates
  35. logging.basicConfig(
  36. level=logging.INFO,
  37. format='PID %(process)5s %(name)18s: %(message)s',
  38. stream=sys.stderr,
  39. )
  40.  
  41.  
  42. # Create a limited thread pool.
  43. executor = concurrent.futures.ProcessPoolExecutor(max_workers=3)
  44.  
  45. event_loop = asyncio.get_event_loop()
  46. try:
  47. event_loop.run_until_complete(
  48. run_blocking_tasks(executor)
  49. )
  50. finally:
  51. event_loop.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement