用法:
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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。