Mit jelent a "re-entry" Sqlite lekérdezés esetén?
Én kijelöltem a kérdéses kifejezést, a jobb egérgombnál kiválasztottam a Google-keresést, és ez lett az első találat:
Ez kielégítő?
Biztos jó kódrészlet van lock-olva? Ezek megfelelőn vannak használva?
Ha tényleg nem túl nagy kód, tedd fel kódmegosztó oldalra. (Vagy előtte leredukálhatod egy minimális, működő, a hibát még éppen produkáló kódra.)
Az RLock ma nekem is megragadta a figyelmem, de arra jutottam, hogy nem indokolja semmi, hogy ezt használjam. Ha van reentry a kódban, akkor én azt nem találom, és szerintem nincs. Reprodukálni pedig nehéz a hibát, ez hetek óta nem jelentkezett, és most sem derült ki, hogy mitől.
Nézzétek meg ezt:
Ez a lelke az adatbázis kezelésnek. Látszik belőle, hol van a Lock, amit említettem.
"Reprodukálni pedig nehéz a hibát, ez hetek óta nem jelentkezett, és most sem derült ki, hogy mitől."
Üdvözlet a többszálas programozás világában. :-)
Csak egy ötlet: a cursor.execute() esetleg nem iterátort ad vissza. (??) A cursor iterátor is egyben, de az execute visszatérő értékének érdemes lehet utánanézni.
Próbáld úgy, hogy nem a visszatérő értékét kapja meg a for ciklus, hanem magával a kurzorral dolgozik.
self.cursor.execute(sql)
for x in self.cursor
Ez esetben persze a kiíratást is be kell vonni a lock-olt kódrészbe, át kell gondolni a metódusokat.
Úgy tűnik, a #7 vezetett rá a megoldásra.
A cursor egy iterátor.
Az execute() visszatérése a cursor maga.
És a lényeg, hogy amikor listává alakítom az iterátort, akkor a háttérben a cursor.next() metódus meghívódik annyiszor, amennyiszer tud. Ez pedig nem volt lockolva, és így lehetőséget adott a concurrencyre. Mivel csak egy pillanatig tart, ezért nehezen okozott hibát.
Köszönöm a válaszokat, értékes tudást szereztem.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!