首页 > 解决方案 > How do get iter_lines to be nonblocking?

问题描述

Hi I am new to Python I have some code that looks like this.

import requests
import asyncio

async def get_http_stream():
  res = requests.get('https://www.blah.com', stream=True)
  for line in res.iter_lines(decode_unicode=True):
    print(line)

async def wait_then_print(secs):
  await asyncio.sleep(secs)
  print(f' xxxxxx {secs} xxxxxx')

async def main():
  await asyncio.wait([
    wait_then_print(20),
    get_http_stream(),
    wait_then_print(10),
    wait_then_print(0)
  ])

if __name__ == '__main__':
  loop = asyncio.get_event_loop()
  loop.run_until_complete(main())

actual output:

every line from stream...
END
xxxxxx 0 xxxxxx 
xxxxxx 10 xxxxxx
xxxxxx 20 xxxxxx

desired output:

xxxxxx 0 xxxxxx 
some lines from stream...
xxxxxx 10 xxxxxx
more lines from stream...
END
xxxxxx 20 xxxxxx 

What's the correct way to get my desired output?

标签: python-3.xpython-requestspython-asynciohttp-streaming

解决方案


推荐阅读