@@ -86,21 +86,31 @@ def workers(self):
8686
8787 @workers .setter
8888 def workers (self , workers_val ):
89- self .workerks_ = operator .index (workers_val )
89+ self .workers_ = operator .index (workers_val )
9090
9191
92+ # Use an immutable default (i.e. None) and create the object when needed
9293_workers_global_settings = contextvars .ContextVar (
93- "scipy_backend_workers" , default = _workers_data ()
94+ "scipy_backend_workers" , default = None
9495)
9596
9697
98+ def _get_workers_settings ():
99+ """Lazy initialization"""
100+ value = _workers_global_settings .get ()
101+ if value is None :
102+ value = _workers_data ()
103+ _workers_global_settings .set (value )
104+ return value
105+
106+
97107def _workers_to_num_threads (w ):
98108 """
99109 Handle conversion of workers to a positive number of threads in the
100110 same way as scipy.fft._pocketfft.helpers._workers.
101111 """
102112 if w is None :
103- return _workers_global_settings . get ().workers
113+ return _get_workers_settings ().workers
104114 _w = operator .index (w )
105115 if _w == 0 :
106116 raise ValueError ("Number of workers must not be zero" )
@@ -707,7 +717,7 @@ def get_workers():
707717 For full documentation refer to `scipy.fft.get_workers`.
708718
709719 """
710- return _workers_global_settings . get ().workers
720+ return _get_workers_settings ().workers
711721
712722
713723@contextlib .contextmanager
0 commit comments