Hallo! Ich habe momentan ein Problem mit meinem Raspberry, an dem ich mittlerweile schon 4 Tage ohne Erfolg arbeite. Ich führe eine Temperaturmessung mit 6 Sensoren durch(Adafruit Max31855 BreakoutBoard). Diese Werte gebe ich auf einem LCD-Display aus und speichere sie in einer .csv-Datei. In den ersten paar Minuten des Programmablaufs funktioniert alles prächtig, doch nach ca. 3-4 Minuten bekomme ich eine Fehlermeldung am Terminal. " sh: error while loading shared libraries: libc.so.6: cannot open shared object file: Error 24 " Google konnte mir hier auch nicht weiterhelfen... Danke im Voraus!
"Too many open files" hab ich auch gefunden. Nur weiß ich nicht, wie genau ich das verstehen soll... Mein Programm arbeitet folgendermaßen: Ich kommuniziere mit meinen Sensoren über SPI. Da das Raspberry nur 2 Chip-Select-Pins hat, verwende ich eine Logikschaltung, bei der ich mit Chip-Select und einzelnen Port-Pins die Sensoren auswähle. In dem Thread, in dem ich die Messung durchführe, schalte ich zunächst alle Sensoren bzw. alle Select-Pins aus und anschließend den einen benötigten ein. So wird der Wert übertragen, welcher dann in einem anderen Thread in eine .csv-Datei gespeichert wird. Meine Frage nun: Welche Files öffne ich denn, dass ich zu viele hätte?
Peter N. schrieb: > Meine Frage nun: Welche Files öffne ich denn, dass ich zu viele hätte? suche doch mal in deinen code ob du zu jeden open auch ein close hast.
Wie Pedro schon schrieb, es scheint sich um ein Open in einer Schleife zu handeln. Das dazugehoerige Close ist aber ausserhalb der Schleife.
Mein Source-Code sieht so aus: def writeFile(): global Intervall num = 0 fileTemp = open('TempFile.csv','wb') writerTemp = csv.writer(fileTemp, delimeter='\t', quotechar='"', quoting=csv.QUOTE_ALL) writerTemp.writerow(["Nummer", "Header","..."]) try: while(1): num = num+1 writerTemp.writerow([num, "Temperatur1","..."]) sleep(Intervall) except: fileTemp.close() return finally: fileTemp.close()
Mein Fehler ist nun etwas konkreter geworden. Anscheinend liegt es nicht an der .csv-Datei, sondern an meinem SPI-Interface. Ich bekomme die Fehlermeldung: " File "/usr/local/lib/python2.7/dist-packages/quick2wire_api-0.0.0.3-py2.7.egg /quick2wire/spi.py", line 40, in _init_ OSError: [Errno 24] Too many open files: '/dev/spidev0.0' " Ich habe schon versucht, spidev0.0 während des Programmablaufs zurückzusetzen - jedoch ohne Erfolg. Irgendwelche Ideen, wie ich dieses Problem lösen könnte?
Mario Grafe schrieb: > Da ist kein File-Open drin?! aber Threads und diese haben auch handels. Oder versteckt in den I2C dingen. Mache doch mal ein "lsof" nach dem das Programm gestartet ist.
Nein - Das ist ja gerade das, was mich so irritiert. Wenn man jedoch eine Stufe tiefer geht, nämlich in das Python-Modul "quick2wire.spi "selbst, ist ein einziges 'open' zu finden.
ja, aber du machst in selectSensor jedesmal thermocouple = MAX31855(0, "c") wo ein self.spi = Spibus.SPIDevice(self.pin, 0) drinnen ist. solltest viell. beim ausstieg aus selectSensor sowas wie thermocouple.spi.close() machen.
Walter M. schrieb: > ja, aber du machst in selectSensor jedesmal > > thermocouple = MAX31855(0, "c") > > wo ein > > self.spi = Spibus.SPIDevice(self.pin, 0) > > drinnen ist. > solltest viell. beim ausstieg aus selectSensor sowas wie > > thermocouple.spi.close() > > machen. You, sir, are a genius! Vielen Dank! Jetzt funktioniert alles einwandfrei.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.