Új hozzászólás Aktív témák
-
atesss
addikt
válasz justmemory #2750 üzenetére
pi@raspberrypi4:~ $ python
Python 2.7.16 (default, Oct 10 2019, 22:02:15)
[GCC 8.3.0] on linux2
Hmm, lehet az oprendszer adja a különbséget.Logolásra milyen modult tudtok ajánlani ?
Én most egy ilyen infót találtam rá: [link]
Inkább már Python3-alapú legyen.A threading-ről is van itt fent egy elég jónak tűnő tutorial: [link] , ez alapján csináltam a saját fenti kódomat is.
[ Szerkesztve ]
-
justmemory
senior tag
Nem tudom, hogy a rendszer különbözősége-e... én chroot-olt kali image-en futtattam...
Bevallom, hogy nekem csak hobbi a (python) programozás; logolni nem szoktam... A threading kapcsán is a netet túrtam rengeteget anno...
Lehet, hogy érdemes már az elején a 3-asra ráállni, hiszen a 2 támogatottsága megszűnt és lassan kivezetik.
--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
cog777
senior tag
Ha python-ban gzip modult hasznalva tomoritett naplofajlt keszitek. Valahogy a tomoritett fajl nagyobb meretu mint az eredeti szoveges fajl. Lehet hogy a hozzafuzes miatt?
Van erre megoldas hogy szoveget hozzaadjunk tomoritett allomanyhoz?ls -la
total 1528
drwxr-xr-x 2 zoltan zoltan 4096 Jun 1 10:58 .
drwxr-xr-x 7 zoltan zoltan 4096 Jun 1 10:58 ..
-rw-r--r-- 1 zoltan zoltan 588566 Jun 1 10:55 esp32.log
-rw-r--r-- 1 zoltan zoltan 964665 Jun 1 10:58 esp32.log.gzItt a forras (programkod formazasa nem mukodik):
import serial
import gzip
import datetime
with serial.Serial('/dev/ttyUSB1', 115200, timeout=None) as ser:
while True:
line = ser.readline().decode()
now_str = datetime.datetime.utcnow().strftime("%d-%m-%Y (%H:%M:%S.%f)")
line = "[{}] | {}".format(now_str, line)
print(line)
with gzip.open('esp32.log.gz', 'at') as f:
f.write(line)[ Szerkesztve ]
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
cog777
senior tag
logging modulba meret alapu es ido alapu rotalo talalhato. Jol mukodnek. Ha kell tomorites, akkor hasznalhatod a gzip modult.
logHandler = logging.handlers.RotatingFileHandler(filename, maxBytes=maxBytes, backupCount=backupCount)
logHandler.rotator = self._rotating
def _rotating(self, source, dest):
f_in = open(source, 'rb')
f_out = gzip.open(dest, 'wb')
f_out.writelines(f_in)
f_out.close()
f_in.close()
os.remove(source)[ Szerkesztve ]
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
atesss
addikt
Köszi a tippet, megnézem.
Viszont az jutott még eszembe, hogy ha az eszközöm egy Raspberry Pi, akkor a logolásnál az SD-kártya írási terhelésére azért lehet oda kellene figyelni.
Vagy lehet valami speciálisabb beállítás / másik modul, ami - ugyan adott esetben lassabb vagy más szempontból hátrányos - de cserébe jobban kíméli az SD-kártyát ? -
cog777
senior tag
Szerintem a linux nem kozvetlenul irja az sd kartyat hanem bufferelve. Ha jol emlekszem - bar ezt a linux/rpi topicban kellene megkerdezni - 5 mpkent irja az ext4 az sdkartyat.
Ha az nem jo, akkor ajanlanam a tmpfs-t v zramot es onnan rsync az sdkartyara neha.HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
asuspc96
senior tag
Helló,
Tudtok valami módszert arra, hogy hogyan lehet egyszerre párhuzamosan elindítani 4 munkafolyamatot ?
Hellyel közzel valamilyen szinten köze van a szálakhoz amire gondolok, de mégse teljesen.Leírom a konkrét problémám, h lássátok a kontextust:
Adva van egy raspberry, illetve egy relémodul amelyet az előbb említett eszközzel szeretnék vezérelni. A cél az lenne, hogy megadok intervallumokat, pl:1-3, 5-11, 14-28, 32-76, 81-90
0-2, 3-8, 9-14, 16-38
2-8, 9-16, 19-23, 24-45
10-12, 14-18, 21-24, 25-87Majd ezek alapján legenerálom a számomra hasznos infókat:
relay times: 1 : [['1', '3'], ['5', '11'], ['14', '28'], ['32', '76'], ['81', '90']]
sleep times: 1 : ['1', 2, 3, 4, 5, 10]
relay times: 2 : [['0', '2'], ['3', '8'], ['9', '14'], ['16', '38']]
sleep times: 2 : ['0', 1, 1, 2, 62]
relay times: 3 : [['2', '8'], ['9', '16'], ['19', '23'], ['24', '45']]
sleep times: 3 : ['2', 1, 3, 1, 55]
relay times: 4 : [['10', '12'], ['14', '18'], ['21', '24'], ['25', '87']]
sleep times: 4 : ['10', 2, 3, 1, 13]
total work cycle time: ['100']
A lényeg az lenne, h a 4db relét egyszerre elindítom, és az időzítéseknek megfelelően egy időben párhuzamosan működnek.Nézegettem egy megoldást erre, amivel szimpatizáltam, de nem vagyok benne biztos, h ezzel a megoldással garantálva lenne az időbeliség:
[https://github.com/celery/celery]Van erre valami megoldás ?
-
asuspc96
senior tag
válasz justmemory #2758 üzenetére
A szálakkal az a baj, mint ahogy említettem fentebb is, hogy nem biztos, hogy az időbeni lefutása az úgy lesz garantálva, ahogy én szeretném.
Lehet, hogy az ütemező éppenséggel másképp fogja csinálni...de természetesen lehet, h igazad vanMire gondolsz egész pontosan ?
-
justmemory
senior tag
válasz asuspc96 #2759 üzenetére
Hát... az ütemezés lényege, hogy pontosan történjen minden Olvastam arról egy cikket régen, hogy az időbeliség hogyan alakul, hiszen a kódnak le kell futnia, stb... Ilyenformán egyszerre nehéz elindítani bármit egy sima kóddal is, hiszen minden kódsor egymás után van... de pl.: egy bash cron-al is tehetsz próbát...
Én olyasmire tudnék gondolni, hogy akártime.sleep()
-et is tehetsz bele, stb.--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
asuspc96
senior tag
válasz justmemory #2760 üzenetére
igen, a
time.sleep()
benne lesz a megoldásban, a fentebb írtsleep time
-okkal, annyi biztos.
De akkor kipróbálom ezt a threading-et.
Erre tökéletes a beépítettthreading
library, vagy ajánlatosabb valami mást nézni ?
(Nem vagyok nagy pythonos, azért érdeklődöm) -
cog777
senior tag
válasz asuspc96 #2757 üzenetére
Csak hangosan gondolkodom:
Kerdes az hogy mennyire fontos az hogy egyszerre kapcsoljanak a relek.Python csak 1 CPU-t tud hasznositani tehat mindenkeppen kapcsolgat a szalak kozott.
Ha eleg az hogy (hasra utok) 0.5 ms alatt kapcsoljon mind a negy rele, akkor akar a szalakat is elhagyhatod, igy egyszerubb lesz.
Pl csinalhatsz egy ciklust, abban vegig mesz mind a 4 relen, majd kivarod az egysegnyi idot, kezded elolrol.En valoszinuleg ezt csinalnam, es kimernem hogy mennyi ido alatt kapcsol 4 relet. Szerintem RPi gyors hozza.
Szalakkal valoszinuleg valamivel/kicsit jobb lenne, de ez sem parhuzamos, es nem biztos h megeri hogy 100us-ot nyertel
Persze ha tanulni akarsz, akkor okes.
Ha tenyleg parhuzamossagot szeretnel akkor inditanod kell kulon processzeket es vezerelni oket, de nem biztos h megeri.
Nalunk a vezerlo szoftvernel par ms a limit ami alatt reagalni kell az esemenyekre. Tehat meg nalunk sem kell egybol lekezelni, pedig GPS-t es hidraulikat kell kezelni.
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
asuspc96
senior tag
Jelenleg most így valósítottam meg:
def work_cycle(self, up_times, sleep_times, gpio, id):
for i in range(len(sleep_times)):
down = float(sleep_times[i])
print(id, '. sleeping to ', down, ' sec')
gpio.off()
sleep(down)
if i < len(up_times):
high = round(float(up_times[i][1]) - float(up_times[i][0]), 2)
print(id, '. going high to ', high, ' sec')
gpio.on()
sleep(high)
def start_work(self):
for i in range(len(self.relay_sleep_times)):
self.relay_threads.append(
threading.Thread(
target=self.work_cycle,
args=(self.relay_up_times[i + 1], self.relay_sleep_times[i], self.relay_gpios[i], i)
)
)
for i in range(len(self.relay_threads)):
self.relay_threads[i].start()
Most az első teszteknek alávetettem tegnap, és egészen azt csinálja, amit szeretnék, úgyh nincs nagy para (egyenlőre)
[ Szerkesztve ]
-
-
asuspc96
senior tag
"Nalunk a vezerlo szoftvernel par ms a limit ami alatt reagalni kell az esemenyekre. Tehat meg nalunk sem kell egybol lekezelni, pedig GPS-t es hidraulikat kell kezelni."
Itt is konkrétan az utóbbira kellene. Lesz 4db hidrauliskus munkahenger, és azokat kell majd irányítani."Nem akartad elorol kezdeni ha vegigertel?"
Ez az egész végülis majd munkadarabokat fog csinálni, és az a terv, hogy amint végez majd, mozgásérzékelővel/lézerkapuval érzékelem, ha kiesett a szerszámból a termék, és egy amolyan "callback"-szerűen az fogja újra engedélyezni az új kört"Nem akartad elorol kezdeni ha vegigertel?"
Ezt hogyan lehetne megvalósítani amúgy ?
Úgyis kelleni fog majd[ Szerkesztve ]
-
cog777
senior tag
válasz asuspc96 #2766 üzenetére
A kododbol kiindulva es legegyszerubben, berakod egy ciklusba
while True:
for i in range(len(self.relay_threads)):
self.relay_threads[i].start()
Mert ahogy latom, vegigfut a feladatokon aztan kilep a szalbol.
(Csak erdekessegnek megemlitem hogy esp32-n futo micropythonon, ha sokszor keszul szal es lepsz ki belole akkor nem szabaditja fel a stack-et es par nap utan crash, igy kenytelen voltam allando 4 szalat kesziteni a halozati kezeleshez)Ha a releket viszonylag sok ideig tartod nyitva es zarva akkor vegulis az en egyszerubb megoldasom is mukodhet. Sok ido itt: masodperc.
Beagyazott rendszereknel szokas hogy van egy ciklus amelynek iteracioja rovid, tehat gyorsan vegig tud menni az osszes feladaton. Sot, ha mindig kivarja az idejet a kovetkezo iteraciora, hiaba vegzett az osszes feladataval, akkor remekul lehet az egyes feladatok idejet megtervezni es akar ido diagrammon abrazolni.
Tehat:
Vezerlo ciklus:
Rele 1 vezerles (nyit/zar/semmit nem csinal, tablazattol fuggoen)
Rele 2 vezerles (nyit/zar/semmit nem csinal, tablazattol fuggoen)
Rele 3 vezerles (nyit/zar/semmit nem csinal, tablazattol fuggoen)
Rele 4 vezerles (nyit/zar/semmit nem csinal, tablazattol fuggoen)
Var (legalabb 1ms legyen ez az iteracio)Ilyenkor teljes kontrol alatt van a vezerlese a hardvernek. Ez nem ritka implementacio, emlekszem hogy egy uzemben egy kis teljesitmenyu proci vezerelt komoly dolgokat igy, abban nem voltak szalak. (Ja, nem azert irom h ne probald ki a szalakat, csak mint erdekesseg)
Bocs ha ezt mar tudtad, nem derult ki szamomra hogy mennyire vagy szakertoje a temanak.
Mas: a print utasitas is lassit a fontos idoziteseket elronthatja. Ilyenkor szoktak kulon szalban/processzben futo naplozasba beletenni az esemenyeket... de ha tobb mp-es idok vannak akkor nem szamit itt.
[ Szerkesztve ]
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
asuspc96
senior tag
"A kododbol kiindulva es legegyszerubben, berakod egy ciklusba
Mert ahogy latom, vegigfut a feladatokon aztan kilep a szalbol."
És a fentebb vázolt megoldásoddal, ugyan azok a szálak kezdenek újra munkába ?
Arra gondolok ugye, hogy a listában ugye azokra athread
-ekre van meg a referencia...ebből indul ki az okfejtésem. Szóval arra akarok kilyukadni, hogy így nem fognak egy idő után elszaporodni a szálak ?Ha jól értem a későbbi leírásod, ami nekem úgymond a szenzorból érkező jel, az lesz itt a kódodban a
Vezerlo ciklus
-ban lévő feltétel, ha a szenzor igazat ad, indulhat újra a ciklus (?)"Bocs ha ezt mar tudtad, nem derult ki szamomra hogy mennyire vagy szakertoje a temanak."
Érdekel minden infó, szívom magamba mint a szivacs...amúgy csak ilyen hobbikódolós"Mas: a print utasitas is lassit a fontos idoziteseket elronthatja. Ilyenkor szoktak kulon szalban/processzben futo naplozasba beletenni az esemenyeket..."
És akkor hogy szedem ki az infót az egyes szálakból, hogy éppen hol tart ?
Gondolom akkor kéne valami szinkronizációs lépés is. Arra gondolok, hogy egyik szálból a másikba csak úgy nem fogok tudni átdobni infót. -
cog777
senior tag
"Ilyenkor teljes kontrol alatt van a vezerlese a hardvernek. Ez nem ritka implementacio, emlekszem hogy egy uzemben egy kis teljesitmenyu proci vezerelt komoly dolgokat igy, abban nem voltak szalak."
vagy 50 tartalyt...
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
cog777
senior tag
válasz kovisoft #2768 üzenetére
Jah, tenyleg... akkor gondolom joinolni kell a szalakat a vegen,
while True:
for i in range(len(self.relay_threads)):
self.relay_threads[i].start()
for i in range(len(self.relay_threads)):
self.relay_threads[i].join()Vagy valami flag-et beallitani ha vegzett az osszes, addig var.
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
cog777
senior tag
válasz asuspc96 #2769 üzenetére
"Arra gondolok ugye, hogy a listában ugye azokra a
thread
-ekre van meg a referencia...ebből indul ki az okfejtésem. Szóval arra akarok kilyukadni, hogy így nem fognak egy idő után elszaporodni a szálak ? "Teljesen jol gondoltad , ki kell torolni a listat, ha minden szal vegzett es ujrakezdeni. PC-n (RPi-n is kb PC operacios rendszer fut) szerintem teljesen mindegy ha eldobja a szalat es nem hasznositja ujra/tartja meg. Van rendes memoria kezeles stb. Nem ugy mint a kicsi esp32...
"És akkor hogy szedem ki az infót az egyes szálakból, hogy éppen hol tart ?
Gondolom akkor kéne valami szinkronizációs lépés is. Arra gondolok, hogy egyik szálból a másikba csak úgy nem fogok tudni átdobni infót."
Csak erdekesseg keppen mondtam, ha fontos lenne a nagyon rovid ido akkor meg a print utasitas is szamitana.
En meg a harverhez ertek kevesbe, mennyi a relek kapcsolasi ideje?
Version2 (kovisoft-nak es neked is koszonhetoen):while True:
for i in range(len(self.relay_threads)):
self.relay_threads[i].start()
for i in range(len(self.relay_threads)):
self.relay_threads[i].join()
self.relay_threads = []HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
cog777
senior tag
válasz kovisoft #2772 üzenetére
Haha... koszi.
Akkor (szamomra) marad a flag-es megoldas, hacsak nincs jobb otleted.
Csinalni kell egy listat flagekkel:
finished_task = [False, False, False, False]Mindegyik task a sajatjat True-ra allitja ha vegzett.
A vezerlo ciklusban pedig addig var az uj iteraciora, amig mind nem lesz True.
(Bar ahogy emlitettem, mivel nagy projektekkel dolgozunk, inkabb hajlok a KISS-re es a szalnelkulisegre pont azert mert egyszerubb. )
[ Szerkesztve ]
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
asuspc96
senior tag
"En meg a harverhez ertek kevesbe, mennyi a relek kapcsolasi ideje?"
Konkrét kapcsolási időt nem tudok, de gondolom elég gyors, mert kattog mint az állat
Ezt vettem:
[4 csatornás optocsatolós relémodul Raspberry PI-hez]@kovisoft
"Így meg ha eltérő futásideje van az egyes threadeknek, akkor mindegyik meg fogja várni a leglassabbat, és csak azután fognak újraindulni."
Az egyáltalán nem gond, ez lenne a cél, h mindegyik megcsinálja a maga kis melóját, majd ha az összes végzett, és megkapták a vezérlő jelet, akkor újra kezdhetik
Fontos, hogy egyszerre kezdjék újra
Szóval ez a joinolós, meg listakitörlős megoldás nekem tetszik amit javasoltál a (#2773)-banMég egy kérdés ezzel kapcsolatban...ha listára hívunk
clear()
-t, illetve ha újra inicializáljuk= []
, akkor az ugyan az ?
Mármint arra gondolok, mint C++-ban, hogy ha újra assignolok valamit a változóhoz, és pl előtte nem toltam rá delete-t, akkor memóriaszivárgás lesz ?[ Szerkesztve ]
-
cog777
senior tag
válasz kovisoft #2775 üzenetére
Az nem baj ha elcsusznak a szalak egymashoz kepest? Latom eselyet annak hogy valamelyik hamarabban vegez mint a masik, tehat nem lesznek szinkronban.
Szerk: ja, latom hogy fontos az egyszerre indulas.
Akkor en a flag-es megoldast valasztanam vagy a joinolost@asuspc96: pythonban van automata GC, nem lesz szivargas.
[ Szerkesztve ]
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
kovisoft
őstag
válasz asuspc96 #2776 üzenetére
Rendben, akkor én értettem félre. Ha meg kell várniuk egymást és egyszerre kell újraindulniuk, akkor jó lesz cog777 join-os megoldása.
Pythonban nem lesz memóriaszivárgás, mert automatikusan felszabadítja azokat az objektumokat, amikre már nincs referencia.
Szerk: lassú voltam.
[ Szerkesztve ]
-
togvau
senior tag
hogy lehet ebben a pitonban egy metódust, vagy eljárást, vagy aminek itt nevezik, a háttérben futtatni?
Tehát amikor elindul az app, init-ben meghívom, és fut a háttérbe amíg az egész alkalmazást bezárom, DE meghívás után az init többi része megy tovább.De nem megy. Ha threadként létrehozom, blokkolja az egész alkalmazást, vár amíg vége (soha).
keephopealive = threading.Thread(target=self.goproCamera.KeepAlive(), args=())
keephopealive.daemon = True
keephopealive.start()hitler, sztálin, micro usb
-
kovisoft
őstag
Így van, jól mondja asuspc96, a target argumentumban egy függvény (callable object) referenciát kell megadni (azaz szimplán a függvény nevét kell beírni), és majd a rendszer fogja azt meghívni, amikor elindítod a threadet. Ha viszont odaírod a "()"-t is, akkor te magad hívod meg a függvényt, ami jelen esetben ráadásul olyan, hogy soha nem tér vissza, ezért el sem jut odáig a vezérlés, hogy létrejöjjön a thread. Próbáld így:
keephopealive = threading.Thread(target=self.goproCamera.KeepAlive, args=())
-
sztanozs
veterán
Azért "fagy le", mert a KeepAlive függvény nem tér vissza, így a threading.Thread várhat az örökkévalóságig, hogy megkapja a callable object-et. máshol meg azért fut hibára, mert a meghívott függvény nem callable object-tel tér vissza (mert van olyan helyzet, ahol egy szelektor függvénnyel választod ki, hogy melyik függvény referenciáját add vissza - pl os-specifikus függvények esetében).
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Egyébként ilyen esetekben ha egy keepalive gondolom poller task futna a háttérben, de a kód többi része nem vészesen heavy, akkor melyiket célszerűbb meglépni? Külön szál mindenképp, vagy asyncio és a blocking metódusokat executorral hívni?
Ugye szálat nyitni erőforrás, míg az asyncio single-threaded, csak az executor híváshoz használna szálakat.
Így is úgyis ott a GIL block, soha nem lesznek a Python szálak párhuzamosan futtatva, de érdekel, hogy mikor melyiket célszerű használni.
Sok helyen azt hallottam, hogy asyncio-t akkor, ha IO orientált az app, pl REST API stb, szálakat meg CPU megerőltető folyamatoknál kell használni. De az utóbbit nem értem, ha én kiadok egy 9999999999 ** 9999999999-et, az elég CPU megerőltető, a GIL block miatt ugyanott vagyok, szálakkal se érek semmit.
Hogy hívják az éhes horgászt? Gyere Pista, kész a kaja!
-
cog777
senior tag
válasz Mr Dini #2784 üzenetére
asyncio dolgot nem tudom, de ha CPU-t teljesen kihasznalo dolgot kellene futtatnom pythonban, akkor inditanek annyi process-t amennyi CPU van a rendszerben (vagy duplajat a hyperthreading miatt) aztan localhoston atadnam az eredmenyeket a vezerlo processnek.
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
Igen, nekem is így van megoldva a Discord bot. K8s podokra van osztva és load balanceolva van a forgalom.
Az tiszta, hogy a bot esetében az asyncio tökéletes. De érdekel, hogy most threadinget mikor érdemes használni.
Hogy hívják az éhes horgászt? Gyere Pista, kész a kaja!
-
Louro
őstag
Sziasztok!
Lehet ciki, de egy napom ráment szinte.
Adott a legújabb PyCharm (2020.1.2). Pandas telepítve.
A kód elég egyszerű:
import pandas as pd
dataset_1 = read_csv('teszt.csv', sep=';')
dataset_1
A teszt.csv tartalma igazából 4 sor.
Tartalma:
H1;H2;H3;H4
afgssdgsdv;dfsdf;77212;2020.01.23
afgssdgsdv;sdfsgfsb;25855;2017.12.03
afgssdgsdv;sfb;47983;2019.08.24Már gugliztam annyit, de nem tudom miért nem megy. Ha nem UTF8 a forrás, akkor kb. agyhalál. encoding='cp1250' beírva lefut hiba nélkül, de nem jön létre semmi.
Ha átállítom UTF8-ra, akkor lefut a fenti, de üres a dataset_1 . dataset_1.head(3)-ra se dob semmit.Nem gondoltam volna, hogy így megfog egy egyszerű feladat.
Mess with the best / Die like the rest
-
Louro
őstag
Már nem tudtam szerkeszteni.
Amiket néztem YT videókat, ott a Jupyter-t használták. Ott a lenti alapján a dataset_1-re a beolvasott állományt kellene kiírnia. A dataset.head(3)-ra pedig az első 3 sort.
Most annyit módosítottam, hogy print függvénybe tettem és megoldódott.
A régi, nem működő (PyCharm alatt):
import pandas as pd
dataset_1 = pd.read_csv('teszt.csv', sep = ';')
dataset_1.head(3)Az új, működő (PyCharm alatt)
import pandas as pd
dataset_1 = pd.read_csv('teszt.csv', sep = ';')
print(dataset_1.head(3))Valóban ennyit számítana a környezet is? :/
[ Szerkesztve ]
Mess with the best / Die like the rest
-
Louro
őstag
Elnézést a spamért, de hasznos lehet egyeseknek.
A netes tutorial-okban azért használnak Jupyter-t, mert az egy web alapú felület. A PyCharm pedig nem Python shell, ami mindent kiír automatikusan. Emiatt, ami Jupyter-ben kiír valamit, azt a PyCharm-ban ki kell "printelni".
Mess with the best / Die like the rest
-
axioma
veterán
Igazabol a python console (most mind1 hogy Jupyter notebook vagy Idle amivel a kozepsulisokat tanitjak mert a python installer resze, vagy akar a pycharm-ban is van python console) az egy interaktiv eszkoz, es az ha kifejezest (jobberteket) kap egy parancssorban, akkor annak az erteket kiirja (raadasul idonkent intelligensebben, mint a python print-je). De ez nem a python hanem az interaktiv konzol tulajdonsaga. Ha programot irsz, akkor - mint mas programnyelveken is - az a sor ami jobberteket tartalmaz, az a kifejezes vegrehajtodik, de ha nincs a keletkezo ertek eltarolva, akkor siman eldobasra kerul. Ahogy peldaul a nyelvek tobbsegeben lehet fuggvenyt eljaraskent hivni (nem csinalni semmit az eredmenyevel). De semmikepp nem kerul kiirasra.
Ha programot irsz pycharm-mal, akkor van amugy me'g egy lehetoseged: teszel egy breakpoint-ot az adott valtozo ertekadasa utani utasitasra, es megnezed, hogy a valtozo mit tartalmaz a Debugger ablakban [a console mellett lesz lathato, amikor elinditod a debug-ot]. Neked az a lenyeg hogy a valtozoba belekerult-e az ertek, es mivel az strukturaltan mutatja (pl. list-et indexszel), jobban is latod mintha egy print erteket kene nezned es szamolgatni, mi hanyadik. -
cousin333
addikt
delimiter == sep
Ezek szerint viszont megvan a probléma oka. Arra figyelni kell, hogy általában az interaktív prompt sem ír ki mindent, csak az utolsó elemet (hacsak nem használsz print-et).
Pandas-ról lehet nézni pár újabb YT videót, de szerintem a hivatalos dokumentációt érdemes böngészni. Ahogy látom, külsőre megváltozott, de tartalmilag eddig is rendben volt. A "mit, hogyan" típusú kérdésekhez a User Guide az érdekes, a piszkos részletekhez meg a referencia.
Ha gyárilag, Pythonnal készítesz csv-t, akkor az UTF-8-at használ, és nem kell semmi konverzió. Ha Excel kompatibilis, akkor cp-1250, elsősorban az ékezetek miatt. Itt tipikus beolvasási paraméter-igény szokott még lenni a sep=";" és a decimal=",", hogy a tizedes értékek is kiértékelhetők legyenek. Esetleg érdemes lehet megadni az egyes oszlopok adattípusait, valamint az index oszlop sorszámát (ha van). A dátum típusokra vannak külön függvények is, akár két oszlopból (dátum + idő) is lehet egyetlen datetime oszlopot összeállítani.
[ Szerkesztve ]
"We spared no expense"
-
asuspc96
senior tag
Helló,
Beszúrom ide is a kérdésem, hátha itt jobban járok vele: https://prohardver.hu/tema/raspberry_pi/hsz_38185-38185.html
-
Janos46
tag
Sziasztok.
Ha valaki jártas az OLED 1306-os témában, talán tud segíteni.
Vettem még otthon egy 1.3" és egy 0.96"-os kijelzőt. A 0.96-ost használtam, és az úgy működött ahogy kell. Mikor a nagyobbat beraktam a helyére fura dolgot láttam, amint láthattok is a képen. Gondoltam annak annyi és mivel itt majd fele áron lehetett venni, vettem egy másikat. Sajnos a jelenség ugyan az. Az kizárt, hogy ugyan az a hibája legyen mind a kettőnek. Az üzletben azt mondták működik, tehát nincs csere. Tudnátok segíteni?Időközben némi új infó is lett:
Cikk: https://bitekmindenhol.blog.hu/2018/06/04/ssd1306_oled_kijelzo#comments
Az 1,3"-os lehet SSD1306 vagy SH1106 chip-el szerelt, a kisebbek csak SSD1306-osak lehetnek.
SH1106 https://www.elecrow.com/download/SH1106%20datasheet.pdf
Support maximum 132 X 64 dot matrix panel
Embedded 132 X 64 bits SRAM
Operating voltage:
- Logic voltage supply: VDD1 = 1.65V - 3.5V
- DC-DC voltage supply: VDD2 = 3.0V – 4.2V
SSD1306 https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf
• Resolution: 128 x 64 dot matrix panel
• Power supply
o VDD = 1.65V to 3.3V for IC logic
o VCC = 7V to 15V for Panel driving
Nem igazán értek hozzá. Akkor most 4 sor kimarad? Mert ha a 132 sorba akar 128 sort betenni, akkor bizony van elcsúszás. Ha a géphez jutok, megnézem hogy a .h fájlban van-e erre vonatkozó paraméterezés.
Vélemény?
Ps.
Ha valaki python alatt bíbelődik a 1306-al, akkor ajánlom az alábbi cikket:
https://ph0en1x.net/96-oled-display-ssd1306-raspberry-pi-connection-experimets.htmlArtillery, lelkes újonc vagyok, tanulni akarok!
-
cousin333
addikt
válasz asuspc96 #2798 üzenetére
A leírását elnézve olyan sok probléma nem lehet vele. A potméterek jól vannak beállítva? Az egyik az érzékenységet állítja (ez lehet túl érzékeny is, mindenre bekapcsol), a másik a bekapcsolás időtartamát, ami a leírás szerint akár 200 mp is lehet, ami nem kevés. A legrosszabb eset persze a kettő (rossz) kombinációja.
Rá tudsz mérni valamivel (oszcilloszkóp, multiméter, digitális analizátor)?
[ Szerkesztve ]
"We spared no expense"
Új hozzászólás Aktív témák
- Autóhifi
- Kerékpárosok, bringások ide!
- Fejhallgató erősítő és DAC topik
- Vodafone otthoni szolgáltatások (TV, internet, telefon)
- Samsung Galaxy S24 - nos, Exynos
- Milyen légkondit a lakásba?
- Trollok komolyan
- Luck Dragon: Asszociációs játék. :)
- Építő/felújító topik
- Redmi Note 12 Pro - nem tolták túl
- További aktív témák...
- -62% HP EliteBook 845 G7 (840 G7):Ryzen 5 4650U,16GB,512GB SSD,vilI.MAGYAR bill.,Bang&Ol.,Win11ProHU
- Több db HP Thunderbolt dock 230W G2 230W -os töltővel MONITORCENTER
- Philips Evnia 42M2N8900 Gamer Oled Monitor!42"/4k/138hz/0,1ms/Freesync-Gsync/HDMI 2.1/TypeC/Ambiglow
- -56% HP EliteBook 840 G8:i7 1165G7,16GB RAM,512GB NMVe SSD,Iris Xe,IR kam.+ujj.olv.,vil.MAGYAR bill.
- Monitortató plexi konzol több elérhető készletről MONITORCENTER