AttributeError:'模块'对象没有属性'ensure_future'

AttributeError:'模块'对象没有属性'ensure_future'

问题描述:

您好我正在写一个n/w绑定的服务器应用程序使用python asyncio它可以接受一个post请求。AttributeError:'模块'对象没有属性'ensure_future'

在POST请求我正在接受一个符号参数

请告诉我对付N/W界application.where我是从其他Web API,通过发送POST请求他们收集数据的最佳方式。

以下是代码:

import asyncio 
import aiohttp 
import json 
import logging 

# async def fetch_content(url, symbols): 
# yield from aiohttp.post(url, symbols=symbols) 

@asyncio.coroutine 
def fetch_page(writer, url, data): 
    response = yield from aiohttp.post(url, data=data) 
    resp = yield from response.read_and_close() 
    print(resp) 
    writer.write(resp) 
    return   


@asyncio.coroutine 
def process_payload(writer, data, scale): 
    tasks = [] 
    data = data.split('\r\n\r\n')[1] 
    data = data.split('\n') 
    data = [x.split(':') for x in data] 
    print(data) 
    data = {x[0]: x[1] for x in data} 
    print(data)     
    # data = data[0].split(':')[1] 
    data = data['symbols'] 
    print(data) 
    data = data.split(',') 
    data_len = len(data) 
    data_first = 0 
    data_last = scale 
    url = 'http://xxxxxx.xxxxxx.xxx/xxxx/xxxx' 
    while data_last < data_len: 
     tasks.append(asyncio.ensure_future(fetch_page(writer, url,{'symbols': ",".join(data[data_first:data_last])}))) 
     data_first += scale 
     data_last += scale 

    tasks.append(asyncio.ensure_future(fetch_page(writer, url,{'symbols': ",".join(data[data_first:data_last])}))) 
    loop.run_until_complete(tasks)  
    return 

@asyncio.coroutine 
def process_url(url): 
    pass 

@asyncio.coroutine 
def echo_server(): 
    yield from asyncio.start_server(handle_connection, 'xxxxxx.xxxx.xxx', 3000) 

@asyncio.coroutine 
def handle_connection(reader, writer): 
    data = yield from reader.read(8192) 

    if data: 
     message = data.decode('utf-8') 
     print(message) 
     yield from process_payload(writer, message, 400) 

    writer.write_eof() 
    writer.close() 


#url = 'http://XXXXXXX.xxxxx.xxx/xxxx/xxxxxx/xxx' 
data = {'symbols': 'GD-US,14174T10,04523Y10,88739910,03209R10,46071F10,77543110,92847N10'} 

loop = asyncio.get_event_loop() 
loop.run_until_complete(echo_server()) 
try: 
    loop.run_forever() 
finally: 
    loop.close() 

但我收到以下错误:

future: <Task finished coro=<handle_connection() done, defined at  fql_server_async_v2.py:53> exception=AttributeError("'module' object has no attribute 'ensure_future'",)> 
Traceback (most recent call last): 
File "/home/user/anugupta/lib/python3.4/asyncio/tasks.py", line 234, in _step 
result = coro.send(value) 
File "fql_server_async_v2.py", line 60, in handle_connection 
yield from process_payload(writer, message, 400) 
File "/home/user/anugupta/lib/python3.4/asyncio/coroutines.py", line 141, in coro 
res = func(*args, **kw) 
File "fql_server_async_v2.py", line 41, in process_payload 
tasks.append(asyncio.ensure_future(fetch_page(writer, url, {'symbols':",".join(data[data_first:data_last])}))) 
AttributeError: 'module' object has no attribute 'ensure_future' 
^CTraceback (most recent call last): 
File "fql_server_async_v2.py", line 72, in <module> 
loop.run_forever() 
File "/home/user/anugupta/lib/python3.4/asyncio/base_events.py", line 236, in run_forever 
self._run_once() 
File "/home/user/anugupta/lib/python3.4/asyncio/base_events.py", line 1017, in _run_once 
event_list = self._selector.select(timeout) 
File "/home/user/anugupta/lib/python3.4/selectors.py", line 424, in select 
fd_event_list = self._epoll.poll(timeout, max_ev) 
+0

当我通过发布符号参数的请求发送大量数据时,它无法一次读取整个数据。所以在批量数据的情况下它正在接收空数据,请告诉我从帖子请求 – user3540276

+1

[asyncio.ensure_future](https://docs.python.org/3/library/asyncio-task)中读取批量数据的最佳方式。 html#asyncio.ensure_future)出现在版本3.4.4中,我猜你正在运行一个较旧的版本。 – Vincent

ensure_future加入ASYNCIO 3.4.4,使用async的早期版本。

虽然async现已弃用,但它将在未来可支持的范围内得到支持。

+0

嗨安德鲁可以建议我以某种方式读取邮寄请求中的批量数据。 data = {symbols ='56633010,17290810,41308610,05945F10,51384710,74838J10,45168K30'}这里符号包含多于20000个值(以逗号分隔),这里data = reader.read(8192)包含超过200个值。请建议我写一个批量数据,我正在收到作为从另一个web api给作者的回应。 – user3540276