我是Pyton API的新手。我无法让脚本返回值。谁能给我一个方向吗。我无法使lambda函数正常工作。我试图将流数据保存到变量中,以便与一组操作一起使用
from tda.auth import easy_client
from tda.client import Client
from tda.streaming import StreamClient
import asyncio
import json
import config
import pathlib
import math
import pandas as pd
client = easy_client(
api_key=config.API_KEY,
redirect_uri=config.REDIRECT_URI,
token_path=config.TOKEN_PATH)
stream_client = StreamClient(client, account_id=config.ACCOUNT_ID)
async def read_stream():
login = asyncio.create_task(stream_client.login())
await login
service = asyncio.create_task(stream_client.quality_of_service(StreamClient.QOSLevel.EXPRESS))
await service
book_snapshots = {}
def my_nasdaq_book_handler(msg):
book_snapshots.update(msg)
stream_client.add_nasdaq_book_handler(my_nasdaq_book_handler)
stream = stream_client.nasdaq_book_subs(['GOOG','AAPL','FB'])
await stream
while True:
await stream_client.handle_message()
print(book_snapshots)
asyncio.run(read_stream())
回调
这个(错误的)假设
显示了理解callback概念的困难。通常,命名模式add处理程序表示正在使用此概念。还有来自Streaming Client文档的锅炉板代码中的注释
这一直在谈论订阅,这个词也是一个强有力的指标
回调的基本原理是,您从服务中提取信息(并被阻止,直到信息可用),当信息可用时,您启用该服务将信息推送给您。您通常会首先向服务注册一个(或多个)兴趣,然后等待事情发生
在第Handling Messages节中,他们给出了一个函数示例(由您提供),如下所示:
它接受以JSON格式转储到控制台的
str
参数。您的示例中的lambda
的作用完全相同兰博达斯
这是不对的。如果lambda函数不能返回值,它们就不会扮演如此重要的角色。请参见Python 3文档中的4.7.6. Lambda Expressions
您案例中的问题是,这两个函数都不做任何您想要的事情,都只是打印到控制台。现在你需要进入这些函数来告诉你该做什么
控制
实际上,您的程序在这个循环中运行
每个
stream_client.handle_message()
调用最终导致对通过调用stream_client.add_nasdaq_book_handler
注册的函数的调用。这就是重点:您的脚本定义了当消息在等待之前到达时要做什么例如,您的函数可以只收集到达的消息:
在实现中使用了全局对象
book_snapshots
。您可以随意扩展/更改此函数(当然,将信息转换为JSON格式将帮助您以结构化方式访问它)。此行将注册您的函数:相关问题 更多 >
编程相关推荐