2016-04-04 19 views
0

Basit bir Python sınıfına sahip olan ve altından bir alt konu olan. Çalıştırma yönteminde, sqlite db'ye bağlanıyorum, basit bir seçim sorgusu yapıyorum ve bağlantıyı kapatıyorum. Oldukça standart şeyler: sadece bir iş parçacığı bir anda çalıştırılırPython sqlite3 - Salt Okunur Birden Fazla Konular = SLOW

def run(self): 
    conn = sqlite3.connect(SHAPE_CACHE_DB) 
    curs = conn.cursor() 
    curs.execute('SELECT * from foo') 
    for row in curs.fetchall(): 
     # do stuff 
    curs.close() 
    conn.close() 

, çalışma yöntemi çok hızlı çalıştırır - sadece < 1 saniye sağlar. Ancak, sınıfın birden çok örneği başlatılır ve çalıştırılırsa - 6 veya daha fazla söyleyelim, çalıştırma yöntemi çok saniye alabilir ???

İplikler arasında okuma erişimi arasında bazı çekişmeler olduğunu tahmin ediyorum. Ama ben sqlite eşzamanlı konulara okuma erişimi izin verdiğini düşündüm ???

cevap

1

Öncelikle sqlite modül ÅŸan değil: İkincisi

https://docs.python.org/2/library/sqlite3.html#multithreading

, size olduğu kadar işi altı kez yaptığını demektir altı parçacığı "AYNI" sorgusu yapıyoruz. Tek parçalı sürümünüz bir döngüde altı sorgu yapıyorsa, biraz daha adil bir karşılaştırma olur.

Üçüncü olarak, birden fazla iş parçacığı ile iş parçacığı geçiş olacak ve bunun için bazı maliyet ödeyecek.

+0

sql aslında iş parçacığı başına değişir. Ve başvuruda bulunduğunuz python doc bağlantısında, imleçlerin ve bağlantıların threadlar arasında paylaşılamayacağını söylüyor. Bunu burada yapmıyorum - her iş parçacığı kendi bağlantı ve imlecini yönetir. Yani başka bir kilit burada oynanmalıdır. – user163757

+0

sql iş parçacığı arasında değişiyor olsa da sonuç kümesi boyutu çok yakın olacak. – user163757

+0

Anlaştık, ilk neden yine de hız için geçerli değil. Sadece bir FYI idi. Sonuç kümesi boyutu çok benzer olacaksa, bu daha büyük zamanın sebebi olabilir. – Sid

0

Bunun bir GIL sorunu olduğunu düşünüyorum. Subclass Thread'den çok, çok işlemciye geçtim. İşlem - sınıfın tüm örnekleri şimdi benzer şekilde çalışıyor.

İlgili konular