Kezdőoldal » Számítástechnika » Programozás » Mit jelent a "re-entry"...

Ozmium42 kérdése:

Mit jelent a "re-entry" Sqlite lekérdezés esetén?

Figyelt kérdés
A dokumentáció úgy fogalmaz, hogy a "concurrent" és "re-entrant" lekérdezés egy cursor esetén nem megengedett. A concurrent világos, párhuzamos threadek ne használják ugyanazt a cursort meggondolatlanul. A re-entrant viszont valami olyasmit akar jelenteni, hogy egy threaden belül nem lehet valamit csinálni. Ez mit jelent?

2019. márc. 30. 11:49
1 2
 1/11 anonim ***** válasza:

É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:

[link]

Ez kielégítő?

2019. márc. 30. 12:50
Hasznos számodra ez a válasz?
 2/11 A kérdező kommentje:
Hazudnék ha azt mondanám, hogy most már teljesen értem, de kezdem kapiskálni. Az eredeti ok, ami miatt ez a kérdés felvetült, hogy az sql lekérdezést egy lock teszi thread-safe-fé, mégis (több hétnyi hibátlan futás után) az a hibaüzenet jelent meg, hogy megpróbáltam concurrent vagy re-entrant lekérdezést csinálni. Mivel concurrent nem lehet a lock miatt, csak a reentry jött még szóba. Bevallom, továbbra sem értem, mit csesztem el.
2019. márc. 30. 13:50
 3/11 anonim ***** válasza:

Biztos jó kódrészlet van lock-olva? Ezek megfelelőn vannak használva?

[link]

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.)

2019. márc. 30. 22:02
Hasznos számodra ez a válasz?
 4/11 anonim ***** válasza:
...Külön kiemelném a fenti linkről az "RLock Objects" részt.
2019. márc. 30. 22:04
Hasznos számodra ez a válasz?
 5/11 A kérdező kommentje:

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:


[link]


Ez a lelke az adatbázis kezelésnek. Látszik belőle, hol van a Lock, amit említettem.

2019. márc. 30. 22:34
 6/11 anonim ***** válasza:

"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. :-)

2019. márc. 30. 22:42
Hasznos számodra ez a válasz?
 7/11 anonim ***** válasza:

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.


[link]

[link]

2019. márc. 30. 23:16
Hasznos számodra ez a válasz?
 8/11 anonim ***** válasza:
..Sőt, ha az execute() esetleg mégis a kurzort adja vissza, akkor sem hiszem, hogy egy másolatát, csak hivatkozást, vagyis több szál ugyanazt a listázást indítva egyszerre fognak olvasni a kurzorból.
2019. márc. 30. 23:28
Hasznos számodra ez a válasz?
 9/11 A kérdező kommentje:

Ú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.

2019. márc. 31. 01:17
 10/11 anonim ***** válasza:

:)

Még egy érdekes rászlet:

[link]

-> "Multithreading"

2019. márc. 31. 13:25
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!