@@ -53,9 +53,10 @@ def __init__(self, min_port=1025, max_port=2000, port_sequence=None):
5353            max_port - max port number  (ignoring if 'port_sequence' is not None) 
5454            port_sequence - iterate sequence which contains numbers of ports 
5555        """ 
56-         if  not  self .__id :  # singleton checker 
57-             self .__id  =  id (self )
58-             self .__init_range (min_port , max_port , port_sequence )
56+         with  self ._lock :
57+             if  not  self .__id :  # singleton checker 
58+                 self .__id  =  id (self )
59+                 self .__init_range (min_port , max_port , port_sequence )
5960
6061    def  __init_range (self , min_port = 1025 , max_port = 2000 , port_sequence = None ):
6162        if  port_sequence :
@@ -87,21 +88,21 @@ def release_port(self, port):
8788    def  port (self , check = False ):
8889        """return next opened port 
8990        Args: 
90-           check - check is port realy  free 
91+           check - check is port really  free 
9192        """ 
92-         if  not  self .__ports :  # refresh ports if sequence is empty 
93-             self .refresh ()
93+         with  self ._lock :
94+             if  not  self .__ports :  # refresh ports if sequence is empty 
95+                 self .refresh ()
9496
95-         try :
96-             port  =  self .__ports .pop ()
97-             if  check :
98-                 while  not  self .__check_port (port ):
99-                     self .release_port (port )
97+             try :
98+                 while  True :
10099                    port  =  self .__ports .pop ()
101-         except  (IndexError , KeyError ):
102-             raise  IndexError ("Could not find a free port,\n closed ports: {closed}" .format (closed = self .__closed ))
103-         self .__closed .add (port )
104-         return  port 
100+                     self .__closed .add (port )
101+                     if  check  and  not  self .__check_port (port ):
102+                         continue 
103+                     return  port 
104+             except  (IndexError , KeyError ):
105+                 raise  IndexError ("Could not find a free port,\n closed ports: {closed}" .format (closed = self .__closed ))
105106
106107    def  refresh (self , only_closed = False ):
107108        """refresh ports status 
0 commit comments