2016-04-08 5 views
0

iplik A (piton 2.7 kopya kütüphanesinden deepcopy fonksiyonunu kullanarak) kopyalanan devam eden bir nesne değiştirilirse, eş zamanlı, iplik B tarafından, gerçekleşmesi ne beklendiğini kopyalanacak?Davranış

DÜZENLEME: değiştirilmesi nesne bir sözlük olduğunu ve değişim ondan tek bir tuş çıkarılması olacaktır. Benim durumumda, eski sözlüğü ya da yeni olanı kopyalamak iyi olurdu - sadece belirsiz devletlerin gerçekleşmeyeceğinden emin olmak istedim. Onlar Python bir GIL (Küresel Tercüman Kilidi) koyduk çünkü

cevap

3

Kod gibi sadece tercüman kopmayacaktır. Yani, kopyalanan nesneyi belirsiz bir durumda hala alacaksınız, ancak GIL sayesinde, içindeki alt nesnelerin her biri tutarlı ve eksiksiz bir Python nesnesi olacaktır. Kopyalanan durumdaki son alt nesneleri, yalnızca bir şans meselesidir.

Diğer iş parçacığı, tek bir sözlük değerini değiştirecek ve kopyanızın eski veya yeni değerle sonuçlanacağı önemli değilse, hiç bir tehlike yoktur: Python bütünlüğünü sağlar. her durumda sözlük nesnesi.

Karmaşık bir nesnede birden çok olası eşzamanlı değişikliğe sahipseniz, kopyanın durumunun "göründüğünü" belirten bir durum olduğundan emin olmak için lock numaralı elkitabını kullanın.

+1

"Onlar Python bir GIL koymak zorunda neden böyle kötü koddur" - tercüman kendisi parçacığı güvensiz tasarımı her türlü çünkü hayır, bir GIL var. – user2357112

+0

evet - haklısınız. fakat GIL'yi javascript gibi, atomik fonksiyonlar yapmak için genişletmeyi düşünüyor. Yine de tekrar söylemeliyim. – jsbueno

+0

'belirsiz durum' ile ne demek istiyorsun? – bsam