Kuidas ma niimoodi elama sain?
Mitte kaua aega tagasi pidin töötama ühe väga koormatud projekti taustal, mille puhul oli vaja korraldada suure hulga taustaülesannete regulaarne täitmine koos keerukate arvutuste ja kolmandate osapoolte teenuste taotlustega. Projekt on asünkroonne ja enne minu tulekut oli sellel lihtne mehhanism cron-käivitusülesannete käivitamiseks: silmus, mis kontrollis praegust aega ja käivitas kogumise kaudu korutiinide rühmad - see lähenemine osutus vastuvõetavaks, kuni selliseid korutiine oli kümneid ja sadu. , aga kui nende arv ületas kahe tuhande, pidin mõtlema tavalise tööjärjekorra korraldamisele maakleri, mitme töölisega jne.
Kõigepealt otsustasin proovida sellerit, mida olin varem kasutanud. Projekti asünkroonsuse tõttu sukeldusin küsimusesse ja nägin
Ütlen nii, projekt on väga huvitav ja töötab üsna edukalt ka teistes meie meeskonna rakendustes ning autor ise ütleb, et suutis selle asünkroonse basseini abil tootmisse viia. Kuid kahjuks see mulle eriti ei sobinud, nagu selgus
Sellega seoses hakkasin otsima alternatiive ja leidis selle! Selleri loojad konkreetselt, nagu ma aru saan
Lisaks saate vaadata
Mida me siis teeme?
Niisiis näitan teile lühikeses artiklite sarjas, kuidas Fausti abil taustaülesannete andmeid koguda. Meie näidisprojekti allikaks on, nagu nimigi ütleb,
PS Otsustades kindlustunde järgi, millega seirepunkt kirjutati, arvan, et lugeja viimase artikli lõpus näeb siiski välja umbes selline:
Projekti nõuded
Kuna olen juba lubanud, teeme väikese nimekirja sellest, mida teenus peaks suutma:
- Laadige regulaarselt üles väärtpabereid ja ülevaadet neist (sh kasum ja kahjum, bilanss, rahavoog - viimase aasta kohta)
- Laadige üles ajaloolised andmed (iga kauplemisaasta kohta leidke kauplemise sulgemishinna äärmuslikud väärtused) - regulaarselt
- Laadige regulaarselt üles uusimaid kauplemisandmeid
- Laadige iga väärtpaberi jaoks üles kohandatud indikaatorite loend – regulaarselt
Nagu oodatud, valime projektile nullist nime: Horton
Valmistame ette infrastruktuuri
Pealkiri on kindlasti tugev, aga pole vaja teha muud, kui kirjutada väike konfiguratsioon docker-compose jaoks koos kafkaga (ja zookeeper - ühes konteineris), kafdrop (kui tahame sõnumeid teemade kaupa vaadata), mongodb. Saame [docker-compose.yml](
version: '3'
services:
db:
container_name: horton-mongodb-local
image: mongo:4.2-bionic
command: mongod --port 20017
restart: always
ports:
- 20017:20017
environment:
- MONGO_INITDB_DATABASE=horton
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=admin_password
kafka-service:
container_name: horton-kafka-local
image: obsidiandynamics/kafka
restart: always
ports:
- "2181:2181"
- "9092:9092"
environment:
KAFKA_LISTENERS: "INTERNAL://:29092,EXTERNAL://:9092"
KAFKA_ADVERTISED_LISTENERS: "INTERNAL://kafka-service:29092,EXTERNAL://localhost:9092"
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT"
KAFKA_INTER_BROKER_LISTENER_NAME: "INTERNAL"
KAFKA_ZOOKEEPER_SESSION_TIMEOUT: "6000"
KAFKA_RESTART_ATTEMPTS: "10"
KAFKA_RESTART_DELAY: "5"
ZOOKEEPER_AUTOPURGE_PURGE_INTERVAL: "0"
kafdrop:
container_name: horton-kafdrop-local
image: 'obsidiandynamics/kafdrop:latest'
restart: always
ports:
- '9000:9000'
environment:
KAFKA_BROKERCONNECT: kafka-service:29092
depends_on:
- kafka-service
Siin pole üldse midagi keerulist. Kafka jaoks deklareeriti kaks kuulajat: üks (sisemine) liitvõrgus kasutamiseks ja teine (väline) väljastpoolt tulevate päringute jaoks, nii et nad edastasid selle väljapoole. 2181 — loomaaiapidaja sadam. Ülejäänu on minu arvates selge.
Projekti luustiku ettevalmistamine
Põhiversioonis peaks meie projekti struktuur välja nägema järgmine:
horton
├── docker-compose.yml
└── horton
├── agents.py *
├── alphavantage.py *
├── app.py *
├── config.py
├── database
│ ├── connect.py
│ ├── cruds
│ │ ├── base.py
│ │ ├── __init__.py
│ │ └── security.py *
│ └── __init__.py
├── __init__.py
├── records.py *
└── tasks.py *
*Kõik, mis ma märkisin Me ei puuduta seda veel, loome lihtsalt tühjad failid.**
Tegime struktuuri. Nüüd lisame vajalikud sõltuvused, kirjutame konfiguratsiooni ja loome ühenduse mongodb-ga. Ma ei esita artiklis failide täisteksti, et mitte viivitada, kuid annan linke vajalikele versioonidele.
Alustame projekti sõltuvuste ja metaga -
Järgmisena alustame sõltuvuste installimist ja virtualenv-i loomist (või saate ise luua venv-kausta ja aktiveerida keskkonna):
pip3 install poetry (если ещё не установлено)
poetry install
Nüüd loome
Mongoga ühenduse loomisel on kõik üsna lihtne. teatas
Mis saab edasi?
Artikkel pole kuigi pikk, kuna siin räägin ainult motivatsioonist ja ettevalmistusest, nii et ärge mind süüdistage - luban, et järgmises osas on tegevust ja graafikat.
Niisiis, selles järgmises osas me:
- Kirjutame aiohttp-le alfavantage väikekliendi koos meile vajalike lõpp-punktide päringutega.
- Loome agendi, kes kogub andmeid väärtpaberite ja nende ajalooliste hindade kohta.
Allikas: www.habr.com