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)
答
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
当我通过发布符号参数的请求发送大量数据时,它无法一次读取整个数据。所以在批量数据的情况下它正在接收空数据,请告诉我从帖子请求 – user3540276
[asyncio.ensure_future](https://docs.python.org/3/library/asyncio-task)中读取批量数据的最佳方式。 html#asyncio.ensure_future)出现在版本3.4.4中,我猜你正在运行一个较旧的版本。 – Vincent