Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python3.6 AttributeError: module 'asyncio' has no attribute 'run'

I tried to read https://hackernoon.com/asynchronous-python-45df84b82434. It's about asynchronous python and I tried the code from this, but I'm getting a weird Error. The code is: `

import asyncio import aiohttp  urls = ['http://www.google.com', 'http://www.yandex.ru', 'http://www.python.org']  async def call_url(url):     print('Starting {}'.format(url))     response = await aiohttp.ClientSession().get(url)     data = await response.text()     print('{}: {} bytes: {}'.format(url, len(data), data))     return data  futures = [call_url(url) for url in urls]  asyncio.run(asyncio.wait(futures)) 

When I try to run it says:

Traceback (most recent call last):   File "test.py", line 15, in <module>     asyncio.run(asyncio.wait(futures)) AttributeError: module 'asyncio' has no attribute 'run' sys:1: RuntimeWarning: coroutine 'call_url' was never awaited 

I dont have any files named ayncio and I have proof:

>>> asyncio <module 'asyncio' from '/usr/lib/python3.6/asyncio/__init__.py'> 
like image 727
Jirka Svítil Avatar asked Oct 13 '18 19:10

Jirka Svítil


People also ask

What is Asyncio run in Python?

asyncio. run(main()) asyncio is a library to write concurrent code using the async/await syntax. asyncio is used as a foundation for multiple Python asynchronous frameworks that provide high-performance network and web-servers, database connection libraries, distributed task queues, etc.

How many times should Asyncio run () be called?

It should be used as a main entry point for asyncio programs, and should ideally only be called once. New in version 3.7.

Is Asyncio in the Python standard library?

The asyncio module is part of the Python standard library since Python 3.4. asyncio is a free software distributed under the Apache license version 2.0.

Is Asyncio native in Python?

Whereas in parallelism the tasks run simultaneously. Asyncio is a built-in library of Python to write concurrent code using async/await syntax. This library provides high-performance network and web servers, database connection libraries, distributed task queues, etc., for asynchronous programming.


2 Answers

asyncio.run is a Python 3.7 addition. In 3.5-3.6, your example is roughly equivalent to:

import asyncio  futures = [...] loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.wait(futures)) 
like image 73
Norrius Avatar answered Oct 16 '22 02:10

Norrius


The asyncio.run() function was added in Python 3.7. From the asyncio.run() function documentation:

New in version 3.7: Important: this function has been added to asyncio in Python 3.7 on a provisional basis.

Note the provisional part; the Python maintainers forsee that the function may need further tweaking and updating, so the API may change in future Python versions.

At any rate, you can't use it on Python 3.6. You'll have to upgrade or implement your own.

A very simple approximation would be to use loop.run_until_complete():

loop = asyncio.get_event_loop() result = loop.run_until_complete(coro) 

although this ignores handling remaining tasks that may still be running. See the asyncio.runners source code for the complete asyncio.run() implementation.

like image 43
Martijn Pieters Avatar answered Oct 16 '22 03:10

Martijn Pieters