Raha ny marina, mazava ny zava-drehetra avy amin'izany:
Ny AlphaVantage API dia natao tsotra sy tsara tarehy, noho izany dia nanapa-kevitra ny hanao ny fangatahana rehetra amin'ny alàlan'ny fomba aho construct_query aiza indray no misy antso http.
Ento ny saha rehetra ho snake_case ho an'ny fanamorana.
Eny, ny haingo logger.catch ho an'ny vokatra traceback tsara tarehy sy ahalalana.
PS Aza adino ny manampy ny marika alphavantage eo an-toerana amin'ny config.yml, na manondrana ny fari-piainan'ny tontolo iainana HORTON_SERVICE_APIKEY. Mahazo marika izahay eto.
kilasy CRUD
Hanana fanangonam-bola hitehirizana fampahalalana meta momba ny antoka isika.
Noho izany, mahazo ny faust application object aloha isika - tena tsotra. Manaraka izany, manambara mazava lohahevitra iray ho an'ny masoivoho izahay... Eto dia ilaina ny milaza hoe inona izany, inona ny mari-pamantarana anatiny ary ahoana no ahafahana mandamina izany amin'ny fomba hafa.
Ny lohahevitra ao amin'ny kafka, raha tiantsika ny hahafantatra ny famaritana marina, dia tsara kokoa ny mamaky miala. tahirin-kevitra, na azonao vakiana famintinana ao amin'ny Habré amin'ny teny Rosiana, izay hita taratra tsara ihany koa ny zava-drehetra :)
Parameter anatiny, voafaritra tsara ao amin'ny faust doc, dia mamela antsika hanitsy ny lohahevitra mivantana ao amin'ny code, mazava ho azy, midika izany fa ny mari-pamantarana nomen'ny mpamorona faust, ohatra: fitazonana, politika fitazonana (famafana default, fa azonao atao ny mametraka mitambatra), isan'ny fisarahana isaky ny lohahevitra (maroatao, ohatra, latsaky ny manan-danja maneran-tany applications faust).
Amin'ny ankapobeny, ny mpandraharaha dia afaka mamorona lohahevitra voatanisa miaraka amin'ny soatoavina manerantany, na izany aza, tiako ny manambara mazava ny zava-drehetra. Fanampin'izay, tsy azo amboarina ny masontsivana sasany (ohatra, ny isan'ny fizarazarana na ny politikan'ny fihazonana) amin'ny lohahevitra ao amin'ny dokam-barotra.
Toy izao ny mety ho endrik'ilay izy raha tsy mamaritra amin'ny tanana ny lohahevitra:
app = get_app()
collect_securities_topic = app.topic("collect_securities", internal=True)
@app.agent(collect_securities_topic)
async def collect_securities(stream: StreamT[None]) -> AsyncIterable[bool]:
async with aiohttp.ClientSession() as session:
async for _ in stream:
logger.info("Start collect securities")
client = AlphaVantageClient(session, API_KEY)
securities = await client.get_securities()
for security in securities:
await SecurityCRUD.update_one(
{"symbol": security["symbol"], "exchange": security["exchange"]}, security, upsert=True
)
yield True
Noho izany, amin'ny fiandohan'ny mpandraharaha, dia manokatra fivoriana aiohttp izahay ho an'ny fangatahana amin'ny alàlan'ny mpanjifanay. Noho izany, rehefa manomboka mpiasa, rehefa atomboka ny mpiasanay, dia hisokatra avy hatrany ny fivoriana iray - iray, mandritra ny fotoana rehetra iasan'ny mpiasa (na maromaro, raha manova ny parameter ianao fifanarahana avy amin'ny masoivoho manana unit default).
Manaraka, manaraka ny stream izahay (apetrakay ny hafatra ao _, satria izahay, ato amin'ity mpandraharaha ity, dia tsy miraharaha ny votoatin'ny) hafatra avy amin'ny lohahevitray, raha misy izy ireo amin'izao fotoana izao, raha tsy izany dia hiandry ny fahatongavany ny tsingerinay. Eny ary, ao anatin'ny tadivavaranay, dia misoratra anarana ny fandraisana ny hafatra, mahazo lisitry ny mavitrika (get_securities dia miverina mavitrika amin'ny alàlan'ny default, jereo ny kaody mpanjifa) ary tehirizo ao amin'ny tahiry, manamarina raha misy fiarovana mitovy amin'ny ticker ary mifanakalo amin'ny angon-drakitra , raha misy, dia havaozina fotsiny ilay izy (ny taratasy).
Andao hanomboka ny famoronana!
> docker-compose up -d
... Запуск контейнеров ...
> faust -A horton.agents worker --without-web -l info
PS Features singa web Tsy hodinihintsika ao amin'ny lahatsoratra ny faus, ka nametraka ny saina mety izahay.
Tao amin'ny baikon'ny fandefasanay dia nilaza tamin'i faust izahay hoe aiza no hitadiavana ilay zavatra fampiharana sy ny tokony hatao amin'izany (manomboha mpiasa) miaraka amin'ny haavon'ny famoahana info log. Mahazo ity vokatra manaraka ity izahay:
Fahasambarana sy fifaliana - vonona ny mpandraharaha voalohany :)
Agent vonona, ho ela velona ny agent vaovao!
Eny tompoko, ny 1/3 amin’ny lalana nomanina ato amin’ity lahatsoratra ity ihany no vitantsika, fa aza kivy fa izao dia ho mora kokoa.
Koa ankehitriny dia mila mpandraharaha iray manangona fampahalalana meta isika ary mametraka izany ao anaty antontan-taratasy fanangonana:
collect_security_overview_topic = app.topic("collect_security_overview", internal=True)
@app.agent(collect_security_overview_topic)
async def collect_security_overview(
stream: StreamT[?],
) -> AsyncIterable[bool]:
async with aiohttp.ClientSession() as session:
async for event in stream:
...
Koa satria ity mpandraharaha ity dia hikarakara fampahalalana momba ny fiarovana manokana, dia mila manondro ny mari-pamantarana (marika) amin'ity fiarovana ity amin'ny hafatra. Ho an'ity tanjona ity ao faus dia misy Records — kilasy izay manambara ny rafitra hafatra amin'ny lohahevitra mpandraharaha.
Amin'ity tranga ity, andao ho any records.pyary lazao hoe inona no tokony ho endriky ny hafatra ho an'ity lohahevitra ity:
import faust
class CollectSecurityOverview(faust.Record):
symbol: str
exchange: str
Araka ny efa noeritreretinao, faust dia mampiasa ny karazana python fanoritsoritana ny schema hafatra, ka izany no mahatonga ny kinova farany ambany tohanan'ny tranomboky. 3.6.
Andao hiverina any amin'ny mpandraharaha, apetraho ireo karazana ary ampio:
Mampiasa ny tetika nambara teo aloha izahay ho an'ny hafatra. Amin'ity tranga ity dia nampiasa ny fomba .cast aho satria tsy mila miandry ny vokatra avy amin'ny mpandraharaha isika, saingy mendrika ny manamarika fa fomba mandefasa hafatra amin'ny lohahevitra:
cast - tsy manakana satria tsy manantena vokatra. Tsy afaka mandefa ny valiny amin'ny lohahevitra hafa ho hafatra ianao.
Ny zavatra farany nampanantenaiko hosoratako amin'ity ampahany ity dia baiko. Araka ny voalaza teo aloha, ny baiko ao amin'ny fau dia fonon-tsindry. Raha ny marina, i faust dia ampifandraisina fotsiny amin'ny baiko mahazatra antsika amin'ny seha-pifandraisana rehefa mamaritra ny lakile -A
Taorian'ny nanambaran'ireo masoivoho tao agents.py ampio asa miaraka amin'ny haingo app.commandmiantso ny fomba nandatsaka у collect_securitites:
@app.command()
async def start_collect_securities():
"""Collect securities and overview."""
await collect_securities.cast()
Noho izany, raha miantso ny lisitry ny baiko isika dia ho ao anatiny ny baiko vaovao:
> faust -A horton.agents --help
....
Commands:
agents List agents.
clean-versions Delete old version directories.
completion Output shell completion to be evaluated by the...
livecheck Manage LiveCheck instances.
model Show model detail.
models List all available models as a tabulated list.
reset Delete local table state.
send Send message to agent/topic.
start-collect-securities Collect securities and overview.
tables List available tables.
worker Start worker instance for given app.
Azontsika ampiasaina toy ny olon-drehetra izany, koa andao atomboka indray ny mpiasa faust ary hanomboka fanangonana tahiry feno:
> faust -A horton.agents start-collect-securities
Inona no hitranga manaraka?
Amin'ny ampahany manaraka, amin'ny fampiasana ireo mpiasa sisa tavela ho ohatra, dia hodinihintsika ny mekanika milentika amin'ny fikatsahana tafahoatra amin'ny vidin'ny fanakatonana ny varotra ho an'ny taona sy ny fandefasana cron ny mpiasa.
PS Eo ambanin'ny tapany farany dia nanontaniana momba ny faust sy confluent kafka aho (inona no mampiavaka ny confluent?). Toa ny confluent dia miasa kokoa amin'ny lafiny maro, fa ny zava-misy dia ny faust dia tsy manana fanohanan'ny mpanjifa feno amin'ny confluent - izany dia avy amin'ny famaritana ny famerana ny mpanjifa ao amin'ny doc.