Spaces:
Running
on
Zero
Running
on
Zero
File size: 1,720 Bytes
d1ed09d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
"""
Control global computation context
"""
import threading
from functools import partial
from dask import config
_globals = config.config
thread_state = threading.local()
def globalmethod(default=None, key=None, falsey=None):
"""Allow function to be taken over by globals
This modifies a method so that occurrences of it may be taken over by
functions registered in the global options. Can be used as a decorator or a
function.
Parameters
----------
default : callable
The default callable to use.
key : str
Key under which we register this function in the global parameters
falsey : callable, None, optional
A function to use if the option is falsey. If not provided, the default
is used instead.
Examples
--------
>>> import dask
>>> class Foo:
... @globalmethod(key='bar', falsey=lambda: 3)
... def bar():
... return 1
>>> f = Foo()
>>> f.bar()
1
>>> with dask.config.set(bar=lambda: 2):
... print(f.bar())
2
>>> with dask.config.set(bar=False):
... print(f.bar())
3
"""
if default is None:
return partial(globalmethod, key=key, falsey=falsey)
return GlobalMethod(default=default, key=key, falsey=falsey)
class GlobalMethod:
def __init__(self, default, key, falsey=None):
self._default = default
self._key = key
self._falsey = falsey
def __get__(self, instance, owner=None):
if self._key in _globals:
if _globals[self._key]:
return _globals[self._key]
elif self._falsey is not None:
return self._falsey
return self._default
|