@@ -57,7 +57,7 @@ def read_rows(
5757        self ,
5858        columns : List [str ],
5959        row_set : bigtable_row_set .RowSet ,
60-         filter : filters .BigtableFilter  =  filters . latest () ,
60+         filter : filters .BigtableFilter  =  None ,
6161        output_type = tf .string ,
6262    ):
6363        """Retrieves values from Google Bigtable sorted by RowKeys. 
@@ -69,23 +69,24 @@ def read_rows(
6969        Returns: 
7070            A `tf.data.Dataset` returning the cell contents. 
7171        """ 
72+ 
73+         # Python initializes the default arguments once at the start of the 
74+         # program. If the fork happens after that (for instance when we run 
75+         # tests using xdist) the program deadlocks and hangs. That is why we 
76+         # have to make sure, all default arguments are initialized on each 
77+         # invocation. 
78+         if  filter  is  None :
79+             filter  =  filters .latest ()
7280        return  _BigtableDataset (
73-             self ._client_resource ,
74-             self ._table_id ,
75-             columns ,
76-             row_set ,
77-             filter ,
78-             output_type ,
81+             self ._client_resource , self ._table_id , columns , row_set , filter , output_type 
7982        )
8083
8184    def  parallel_read_rows (
8285        self ,
8386        columns : List [str ],
8487        num_parallel_calls = tf .data .AUTOTUNE ,
85-         row_set : bigtable_row_set .RowSet  =  bigtable_row_set .from_rows_or_ranges (
86-             bigtable_row_range .infinite ()
87-         ),
88-         filter : filters .BigtableFilter  =  filters .latest (),
88+         row_set : bigtable_row_set .RowSet  =  None ,
89+         filter : filters .BigtableFilter  =  None ,
8990        output_type = tf .string ,
9091    ):
9192        """Retrieves values from Google Bigtable in parallel. The ammount of work 
@@ -101,11 +102,17 @@ def parallel_read_rows(
101102            A `tf.data.Dataset` returning the cell contents. 
102103        """ 
103104
105+         # We have to make sure that all the default arguments are initialized 
106+         # on each invocation. For more info see read_rows method. 
107+         if  row_set  is  None :
108+             row_set  =  bigtable_row_set .from_rows_or_ranges (
109+                 bigtable_row_range .infinite ()
110+             )
111+         if  filter  is  None :
112+             filter  =  filters .latest ()
113+ 
104114        samples  =  core_ops .bigtable_split_row_set_evenly (
105-             self ._client_resource ,
106-             row_set ._impl ,
107-             self ._table_id ,
108-             num_parallel_calls ,
115+             self ._client_resource , row_set ._impl , self ._table_id , num_parallel_calls 
109116        )
110117
111118        def  map_func (idx ):
0 commit comments