1414import os
1515import sys
1616import tempfile
17+ import threading
1718import zlib
1819
1920from lib .core .compat import xrange
@@ -74,6 +75,7 @@ def __init__(self, items=None):
7475 self .chunk_length = sys .maxsize
7576 self .cache = None
7677 self .filenames = set ()
78+ self ._lock = threading .Lock ()
7779 self ._os_remove = os .remove
7880 self ._size_counter = 0
7981
@@ -95,18 +97,19 @@ def __iadd__(self, value):
9597 return self
9698
9799 def append (self , value ):
98- self .chunks [- 1 ].append (value )
99-
100- if self .chunk_length == sys .maxsize :
101- self ._size_counter += _size_of (value )
102- if self ._size_counter >= BIGARRAY_CHUNK_SIZE :
103- self .chunk_length = len (self .chunks [- 1 ])
104- self ._size_counter = None
105-
106- if len (self .chunks [- 1 ]) >= self .chunk_length :
107- filename = self ._dump (self .chunks [- 1 ])
108- self .chunks [- 1 ] = filename
109- self .chunks .append ([])
100+ with self ._lock :
101+ self .chunks [- 1 ].append (value )
102+
103+ if self .chunk_length == sys .maxsize :
104+ self ._size_counter += _size_of (value )
105+ if self ._size_counter >= BIGARRAY_CHUNK_SIZE :
106+ self .chunk_length = len (self .chunks [- 1 ])
107+ self ._size_counter = None
108+
109+ if len (self .chunks [- 1 ]) >= self .chunk_length :
110+ filename = self ._dump (self .chunks [- 1 ])
111+ self .chunks [- 1 ] = filename
112+ self .chunks .append ([])
110113
111114 def extend (self , value ):
112115 for _ in value :
0 commit comments