用法:
class distributed.Semaphore(max_leases=1, name=None, register=True, scheduler_rpc=None, loop=None)
此semaphore 将跟踪调度程序上的租约,这些租约可由此类的实例获取和释放。如果已经获得了最大数量的租约,则无法获得更多租约,调用者将等待直到另一个租约被释放。
使用超时来控制生命周期或租约。此超时由此实例的
Client
定期刷新,并在工作人员失败的情况下提供防止死锁或资源不足的保护。可以使用配置选项distributed.scheduler.locks.lease-timeout
控制超时,并且使用选项distributed.scheduler.locks.lease-validation-interval
设置调度程序验证超时的时间间隔。与 python 标准库的 Semaphore 的一个显著区别是,此实现不允许发布比获取更多的频率。如果发生这种情况,会发出警告,但不会修改内部状态。
警告
此实现仍处于实验状态,并且在此库的主要版本没有任何更改的情况下,可能会发生细微的行为变化。
警告
在租约超时的情况下,此实施容易受到租约超额预订的影响。建议监控日志信息并将上述配置选项调整为适合用户应用程序的值。
- max_leases: int (optional):
可同时授予的最大租赁数量。这有效地设置了对特定资源的并行访问量的上限。默认为 1。
- name: string (optional):
要获取的信号量的名称。选择相同的名称允许两个断开连接的进程进行协调。如果没有给出,将生成一个随机名称。
- register: bool:
如果为 True,则向调度程序注册信号量。这需要在获得任何租约之前完成。如果在初始化的时候没有做,也可以通过调用这个类的 register 方法来做。注册时,需要等待。
- scheduler_rpc: ConnectionPool:
连接到调度程序的 ConnectionPool。如果提供 None ,它使用工作人员或客户端池。该参数主要用于测试。
- loop: IOLoop:
此实例正在使用的事件循环。如果提供了 None,则重用活动工作者或客户端的循环。
参数:
注意:
如果客户端尝试释放信号量但没有获得租约,这将引发异常。
当信号量关闭时,如果对于该关闭的信号量,客户端尝试:
- 获取租约:将引发异常。
- 发布:将记录警告。
- 关闭:什么都不会发生。
dask默认执行函数,假设它们是纯的,当在这样的函数中使用信号量获取/释放时,必须注意实际上有side-effects,因此,该函数不再被认为是纯的。如果不考虑这一点,可能会导致意外行为。
例子:
>>> from distributed import Semaphore ... sem = Semaphore(max_leases=2, name='my_database') ... ... def access_resource(s, sem): ... # This automatically acquires a lease from the semaphore (if available) which will be ... # released when leaving the context manager. ... with sem: ... pass ... ... futures = client.map(access_resource, range(10), sem=sem) ... client.gather(futures) ... # Once done, close the semaphore to clean up the state on scheduler side. ... sem.close()
相关用法
- Python distributed.SpecCluster.scale用法及代码示例
- Python distributed.SpecCluster.scale_up用法及代码示例
- Python distributed.SpecCluster.adapt用法及代码示例
- Python distributed.SpecCluster用法及代码示例
- Python distributed.protocol.serialize.register_generic用法及代码示例
- Python distributed.Client.gather用法及代码示例
- Python distributed.recreate_tasks.ReplayTaskClient.recreate_task_locally用法及代码示例
- Python distributed.diagnostics.plugin.SchedulerPlugin用法及代码示例
- Python distributed.Client.ncores用法及代码示例
- Python distributed.Client.retire_workers用法及代码示例
- Python distributed.Client.unregister_worker_plugin用法及代码示例
- Python distributed.fire_and_forget用法及代码示例
- Python distributed.Client.set_metadata用法及代码示例
- Python distributed.Client.scheduler_info用法及代码示例
- Python distributed.Client.submit用法及代码示例
- Python distributed.Client.compute用法及代码示例
- Python distributed.get_worker用法及代码示例
- Python distributed.Client.nthreads用法及代码示例
- Python distributed.comm.resolve_address用法及代码示例
- Python distributed.Client.unpublish_dataset用法及代码示例
注:本文由纯净天空筛选整理自dask.org大神的英文原创作品 distributed.Semaphore。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。