2016-04-14 13 views
0

Genel bir başarı listesi diyelim.Python parçacığı öğeleri koleksiyona biriktirmek için

İş parçacığı iletişiminin Queue s aracılığıyla yapılması gerektiğini, ancak Kuyruk documentation'u okurken, sıra uzunluğunun tam sayısını elde etmek için bir işlev olmadığını biliyorum.

Queue.qsize() Sıranın yaklaşık boyutunu döndürür. , Qsize Not()

0 müteakip olsun() engellemez garanti etmez, ne de() engellemez koymak() < maxsize garanti qsize edecektir.

Ben de len(queue) denedim ama çalışmıyor:

>>> import Queue 
>>> q = Queue.Queue() 
>>> q.put(1) 
>>> q.put(2) 
>>> len(q) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: Queue instance has no attribute '__len__' 

Ben de List kullanma hakkında okudum ama don't have definite answer verileri bozuk veya değil edilecektir.

Şu anda aklıma gelen tek seçeneğim queue.get()'u queue boşluğuna dönüştürmek için boş bir listeye dönüştürmektir. Daha iyi bir seçim var mı?

+0

Neden 'Kuyruk 'alt sınıfını oluşturmuyor ve kendi' length' işlevinizi eklemiyor ya da __len__' komutunu uygulamıyorsunuz? Bu muhtemelen kötü bir fikirdir ve iş parçacığı güvenliğini garanti edeceğine dair bir garanti yoktur, ancak bu bir atıştır. –

+0

Ayrıca, neden qsize() 'yeterli değil? –

+0

Belgeyi okuduğumda, "kuyruk kuyruğunun yaklaşık boyutunu döndür" yazıyor. İhtiyacım olan şey, ana iş parçacığının sonunda, kuyrukta kaç öğe olduğunu belirlemek için gerekiyor. –

cevap

1

qsize'un nedeni, bu garantileri vermemenin nedeni, .qsize() ve .get() arasında bir öğenin başka bir öğe ekleyebilmesidir. Diğer sonra qsize kullanmalısınız. Bu, arama anında kuyruğun bir tam boyutunu verecektir. Burada "yaklaşık" kelimesi, bu çağrı çağırma anından sonra artık aynı kalmayacağı anlamına gelir. Ancak paylaşılan veri yapısına erişen iş parçacıkları ile uğraşırken, yapının ne olduğu önemli değil, her zaman aynı sorunla karşılaşacaksınız.

+0

Netleştirdiğiniz için teşekkür ederiz. –