Mar sin, mar sin, an dĂ rna pĂ irt. Mar a chaidh a sgrĂŹobhadh roimhe, nĂŹ sinn na leanas ann:
SgrĂŹobhamaid neach-dèiligidh beag airson alphavantage air aiohttp le iarrtasan airson na puingean crĂŹochnachaidh a dhâ fheumas sinn.
Cruthaichidh sinn à idseant a chruinnicheas dà ta mu thèarainteachdan agus meta-fhiosrachadh mun deidhinn.
Ach, is e seo a nĂŹ sinn airson aâ phròiseict fhèin, agus a thaobh rannsachadh faust, ionnsaichidh sinn mar a sgrĂŹobhas sinn riochdairean a bhios a âgiullachd tachartasan bho kafka, a bharrachd air mar a sgrĂŹobhas sinn òrdughan (cliog air wrapper), nar cĂšise - airson teachdaireachdan putaidh lĂ imhe chun chuspair a tha an neach-ionaid aâ cumail sĂšil.
Ullachadh
Cliant AlphaVantage
An toiseach, sgrÏobhamaid neach-dèiligidh beag aiohttp airson iarrtasan gu alphavantage.
Gu fĂŹrinneach, tha a h-uile dad soilleir bhuaithe:
Tha an AlphaVantage API air a dhealbhadh gu sĂŹmplidh agus gu breagha, agus mar sin chuir mi romham a h-uile iarrtas a dhèanamh tron ââââdòigh construct_query far a bheil gairm http an uair sin.
Bheir mi na raointean gu lèir snake_case airson comhfhurtachd.
Uill, an sgeadachadh logger.catch airson toradh traceback brèagha agus fiosrachail.
PS Na dÏochuimhnich cuir ris an tòcan alphavantage gu h-ionadail gu config.yml, no à s-mhalairt caochladair na h-à rainneachd HORTON_SERVICE_APIKEY. Gheibh sinn tòcan an seo.
clas CRUD
Bidh cruinneachadh thèarainteachdan againn gus meata-fhiosrachadh a stòradh mu thèarainteachdan.
Airson a-nis bidh an cruthachadh tagraidh as sĂŹmplidh againn, beagan nas fhaide air adhart leudaichidh sinn e, ge-tĂ , gus nach cĂšm thu a âfeitheamh, an seo iomraidhean gu App-class. Tha mi cuideachd a 'toirt comhairle dhut sĂšil a thoirt air a' chlas roghainnean, oir tha e an urra ris a 'mhòr-chuid de na roghainnean.
Am prĂŹomh phĂ irt
Ăidseant airson a 'cruinneachadh agus a' cumail suas liosta de thèarainteachdan
Mar sin, an toiseach gheibh sinn an stuth tagraidh faust - tha e gu math sĂŹmplidh. An ath rud, bidh sinn gu soilleir aâ cur an cèill cuspair don neach-ionaid againn ... An seo is fhiach iomradh a thoirt air dè a thâ ann, dè am paramadair a-staigh agus mar as urrainnear seo a chuir air dòigh ann an dòigh eadar-dhealaichte.
Cuspairean ann an kafka, ma tha sinn airson faighinn a-mach an dearbh mhĂŹneachadh, tha e nas fheĂ rr a leughadh dheth. sgrĂŹobhainn, no faodaidh tu leughadh eas-chruthach air an ionad ann an Ruisis, far a bheil a h-uile cĂ il cuideachd air a nochdadh gu math ceart :)
Paramadair a-staigh, air a mhĂŹneachadh gu math anns an doc faust, aâ leigeil leinn an cuspair a rèiteachadh gu dĂŹreach anns a âchòd, gu dearbh, tha seo aâ ciallachadh na paramadairean a thug an luchd-leasachaidh faust seachad, mar eisimpleir: gleidheadh, poileasaidh glèidhidh (cuir Ă s gu bunaiteach, ach faodaidh tu suidheachadh cĂšmhnant), an Ă ireamh de phĂ irtean a rèir cuspair (sgòrana dhèanamh, mar eisimpleir, nas lugha na cudromachd cruinneil iarrtasan faust).
San fharsaingeachd, faodaidh an neach-ionaid cuspair stiÚirichte a chruthachadh le luachan cruinneil, ge-tà , is toil leam a h-uile dad fhoillseachadh gu soilleir. A bharrachd air an sin, chan urrainnear cuid de pharamadairean (mar eisimpleir, an à ireamh de sgaradh no poileasaidh glèidhidh) den chuspair san t-sanas à idseant a rèiteachadh.
Seo cò ris a bhiodh e coltach gun a bhith aâ mĂŹneachadh aâ chuspair le lĂ imh:
Uill, a-nis mÏnichidh sinn dè a nÏ an neach-ionaid againn :)
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
Mar sin, aig toiseach an neach-ionaid, bidh sinn a 'fosgladh seisean aiohttp airson iarrtasan tron ââââneach-dèiligidh againn. Mar sin, nuair a thòisicheas tu air neach-obrach, nuair a thèid an neach-ionaid againn a chuir air bhog, thèid seisean fhosgladh sa bhad - aon, airson an Ăšine gu lèir a bhios an neach-obrach a âruith (no grunn, ma dhâ atharraicheas tu am paramadair airgead-crĂŹche bho Ă idseant le aonad bunaiteach).
An uairsin, leanaidh sinn an t-sruth (bidh sinn a 'cur an teachdaireachd a-steach _, leis nach eil sinn, san Ă idseant seo, aâ gabhail cĂšram mu shusbaint) teachdaireachdan bhon chuspair againn, ma tha iad ann aig an ĂŹre gnĂ thach, air neo fuirichidh ar cearcall gus an ruig iad. Uill, taobh a-staigh ar lĂšb, bidh sinn aâ clĂ radh cuidhteas na teachdaireachd, aâ faighinn liosta de thèarainteachdan gnĂŹomhach (tilleadh get_securities a-mhĂ in gnĂŹomhach gu bunaiteach, faic còd teachdaiche) agus sĂ bhail e don stòr-dĂ ta, aâ sgrĂšdadh a bheil tèarainteachd ann leis an aon ticker agus iomlaid anns an stòr-dĂ ta , ma tha, bidh e (am pĂ ipear) dĂŹreach air Ăšrachadh.
Nach cuir sinn air bhog ar cruthachadh!
> docker-compose up -d
... ĐĐ°ĐżŃŃĐş кОнŃоКноŃОв ...
> faust -A horton.agents worker --without-web -l info
Feartan PS co-phĂ irt lĂŹn Cha bheachdaich mi air faust anns na h-artaigilean, agus mar sin shuidhich sinn am bratach iomchaidh.
Anns an Ă ithne tòiseachaidh againn, dhâ innis sinn dha faust cĂ ite am bu chòir dhut coimhead airson an nĂŹ tagraidh agus dè a nĂŹ thu leis (cuir air bhog neach-obrach) leis an ĂŹre toraidh log fiosrachaidh. Gheibh sinn an toradh a leanas:
Bheir sinn sĂšil air an t-seata sgaradh. Mar a chĂŹ sinn, chaidh cuspair a chruthachadh leis an ainm a dh'ainmich sinn sa chòd, an Ă ireamh bunaiteach de phĂ irtean (8, air a thoirt bho cuspair_partitions - paramadair cuspair tagraidh), leis nach do shònraich sinn luach fa leth airson ar cuspair (tro sgaradh). Tha an neach-ionaid a chaidh a chuir air bhog san neach-obrach aâ faighinn a h-uile sgaradh 8, leis gur e seo an aon fhear, ach thèid seo a dheasbad nas mionaidiche anns a âphĂ irt mu bhith aâ cruinneachadh.
Uill, a-nis is urrainn dhuinn a dhol gu uinneag crĂŹche eile agus teachdaireachd falamh a chuir chun chuspair againn:
PS a 'cleachdadh @ tha sinn aâ sealltainn gu bheil sinn aâ cur teachdaireachd gu cuspair leis an ainm âcollect_securitiesâ.
Anns a 'chĂšis seo, chaidh an teachdaireachd gu sgaradh 6 - faodaidh tu seo a dhearbhadh le bhith a' dol gu kafdrop air localhost:9000
Aâ dol gu uinneag aâ chrĂŹoch leis an neach-obrach againn, chĂŹ sinn teachdaireachd toilichte air a chuir aâ cleachdadh loguru:
2020-09-23 00:26:37.304 | INFO | horton.agents:collect_securities:40 - Start collect securities
Faodaidh sinn cuideachd sgrĂšdadh a dhèanamh air mongo (aâ cleachdadh Robo3T no Studio3T) agus faicinn gu bheil na tèarainteachdan san stòr-dĂ ta:
Chan e billeanair a thâ annam, agus mar sin tha sinn riaraichte leis aâ chiad roghainn seallaidh.
Sonas agus toileachas - tha a 'chiad Ă idseant deiseil :)
Agent deiseil, fada beò an neach-ionaid Úr!
Tha, a dhaoine uaisle, cha do chòmhdaich sinn ach 1/3 den t-slighe a chaidh ullachadh leis an artaigil seo, ach na bi air do mhealladh, oir a-nis bidh e nas fhasa.
Mar sin a-nis tha feum againn air Ă idseant a chruinnicheas fiosrachadh meta agus a chuireas ann an sgrĂŹobhainn cruinneachaidh e:
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:
...
Leis gum bi an neach-ionaid seo aâ pròiseasadh fiosrachadh mu thèarainteachd sònraichte, feumaidh sinn an ticker (samhla) den tèarainteachd seo a chomharrachadh anns an teachdaireachd. Airson an adhbhair seo ann am faust tha clĂ ran - clasaichean a bhios ag ainmeachadh an sgeama teachdaireachd ann an cuspair an Ă idseant.
Anns a 'chĂšis seo, rachamaid gu clĂ ran.pyagus thoir cunntas air cò ris a bu chòir an teachdaireachd airson aâ chuspair seo a bhith coltach:
import faust
class CollectSecurityOverview(faust.Record):
symbol: str
exchange: str
Mar is dòcha gu robh thu air smaoineachadh, bidh faust aâ cleachdadh an nota seòrsa python gus cunntas a thoirt air sgeama na teachdaireachd, agus is e sin as coireach gur e an dreach as lugha a tha aâ faighinn taic bhon leabharlann 3.6.
Tillidh sinn chun neach-ionaid, suidhich na seòrsaichean agus cuir ris:
Mar a chĂŹ thu, bidh sinn aâ dol seachad air paramadair Ăšr le sgeama gu modh tòiseachaidh cuspair - value_type. Nas fhaide, tha a h-uile dad a 'leantainn an aon sgeama, agus mar sin chan eil mi a' faicinn feum sam bith a bhith a 'fuireach air rud sam bith eile.
Uill, is e an suathadh mu dheireadh fios a chuir chun neach-ionaid cruinneachadh fiosrachaidh meta gu collect_securitites:
Cleachdaidh sinn an sgeama a chaidh ainmeachadh roimhe airson na teachdaireachd. Anns a 'chÚis seo, chleachd mi an dòigh .cast oir chan fheum sinn feitheamh airson an toradh bhon neach-ionaid, ach is fhiach iomradh a thoirt air sin dòighean cuir teachdaireachd chun chuspair:
tilgeadh - chan eil e aâ bacadh leis nach eil dĂšil aige ri toradh. Chan urrainn dhut an toradh a chuir gu cuspair eile mar theachdaireachd.
cuir - chan eil e aâ bacadh leis nach eil dĂšil aige ri toradh. Faodaidh tu Ă idseant a shònrachadh anns aâ chuspair air an tèid an toradh.
faighnich - feitheamh ri toradh. Faodaidh tu Ă idseant a shònrachadh anns aâ chuspair air an tèid an toradh.
Mar sin, tha sin uile le riochdairean airson an-diugh!
An sgioba aisling
Is e an rud mu dheireadh a gheall mi a sgrĂŹobhadh sa phĂ irt seo òrdughan. Mar a chaidh a rĂ dh na bu thrĂ ithe, tha òrdughan ann am faust mar phasgan timcheall air cliog. Gu dearbh, tha faust dĂŹreach aâ ceangal ar n-Ă ithne Ă bhaisteach ris an eadar-aghaidh aige nuair a tha e aâ sònrachadh an iuchair -A
Ăs deidh na riochdairean ainmichte a-steach Ă idseantan.py cuir gnĂŹomh le sgeadadair app.commandgairm an dòigh sgaoileadh Ń cruinnich_securitites:
@app.command()
async def start_collect_securities():
"""Collect securities and overview."""
await collect_securities.cast()
Mar sin, ma chanas sinn ris an liosta òrdughan, bidh an à ithne Úr againn ann:
> 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.
Faodaidh sinn a chleachdadh mar dhuine sam bith eile, mar sin leig leinn an neach-obrach faust ath-thòiseachadh agus tòiseachadh air cruinneachadh là n de thèarainteachdan:
> faust -A horton.agents start-collect-securities
Dè thachras a-nis?
Anns an ath phĂ irt, aâ cleachdadh na h-Ă idseantan a tha air fhĂ gail mar eisimpleir, beachdaichidh sinn air an inneal sinc airson a bhith aâ lorg fĂŹor chrĂŹochan ann am prĂŹsean dĂšnaidh malairt airson na bliadhna agus cur air bhog riochdairean cron.
Tha sin uile airson an-diugh! Tapadh leibh airson an leughadh :)
PS Fon phĂ irt mu dheireadh chaidh faighneachd dhomh mu dheidhinn faust agus confluent kafka (dè na feartan a thâ aig confluent?). Tha e coltach gu bheil confluent nas gnĂŹomhaiche ann an iomadh dòigh, ach is e an fhĂŹrinn nach eil lĂ n thaic teachdaiche aig Faust airson confluent - tha seo aâ leantainn bho tuairisgeul air cuingealachaidhean teachdaiche san doc.