分层资源锁定机制

Locker的Python项目详细描述


分级资源锁定系统
==================================== < BR>
locker的存在允许跨独立或分布式系统协调资源锁。
使用locker的系统可以是简单的脚本、ci作业,甚至是单独的网络节点,它们只是
需要能够通过http查询locker实例。 < BR>
locker不同于标准sephemore系统,它将资源理解为
层次结构。资源嵌套在url路径ie:"/foo/bar"中,其中"bar"是"foo"的子级。
如果"/foo/bar"上存在锁,则无法锁定父项("/foo"),因为其子项之一是
锁定。同样,不能锁定"/foo/bar"的子级,例如"/foo/bar/baz",因为它的父级
已锁定。像"/foo/zip"这样的兄弟姐妹可能被锁定。 < BR>
资源名称完全是任意的,没有映射到任何物理资源。系统
信任查询锁存器不使用锁定的资源,如果资源不是,则释放它们
需要更长时间。 < BR>< BR>
初始化
----- < BR>
可以通过直接在locker目录中运行初始化。本遗嘱
使用默认IP和端口(127.0.0.1:8765)上的HTTP服务器初始化储物柜。带锁的
序列化为"locks.db"。可以使用命令行参数修改这些选项。 < BR><…代码块::bash
$locker/\uu init\uuu.py—IP 0.0.0.0—端口8080—文件mylocks.dat < BR>
储物柜也可以用作更大系统的组件。导入locker对象并初始化
使用runserver=false。如果您的系统使用cherrypy,那么locker的api方法已经被修饰了
带有@expose。请注意,即使不使用其web服务器locker api方法运行,也会返回jsonified 数据。有关详细信息,请参阅帮助(储物柜)。 < BR><…代码块::python
来自储物柜进口储物柜 < BR>
locker=locker(运行服务器=false) < BR>< BR>
基本用法
----- < BR>
locker公开了三种api方法来锁定、解锁和查询资源。分别是
"Canhaz"、"Nowant"和"Dohaz"。使用python调用
locker api但是任何能够进行http调用的东西都可以工作。 < BR>
锁定资源
################# < BR>
通过canhaz调用锁定或保留资源。此调用检查资源是否
locked和if unlocked返回ok和解锁资源时要使用的令牌。警告:
没有此令牌,无法解锁资源。 < BR>
下面的示例锁定资源"/my/resource"。 < BR><…代码块::python
>>>response=get("http://localhost:8765/canhaz/my/resource")
>;>>response.json()
{u'token':u'cb7edb5c-6b7c-4b60-b127-3a7e344f00d0',u'ok':真的} < BR>
如果再次尝试锁定同一资源(或/my/resource的父级或子级),则
请求将失败。 < BR><…代码块::python
>>>response=get("http://localhost:8765/canhaz/my/resource")
>;>>response.json()
{u'ok':假,u'lockedby':u'?'} < BR>
有关"高级用法"部分中的"锁定方式"字段的更多信息。 < BR>< BR>
解锁资源
################### < BR>
使用nowant调用完成资源解锁。如果资源被锁定并且
令牌对其解锁有效。 < BR><…代码块::python
>>response=get("http://localhost:8765/nowant/my/resource?令牌=CB7EDB5C-6B7C-4B60-B127-3A7E344F00d0")
>;>>response.json()
{u'ok':真的} < BR>
如果资源未锁定或令牌无效,则调用将失败。 < BR><…代码块::python
>>response=get("http://localhost:8765/nowant/my/resource?令牌=无效令牌")
>;>>response.json()
{u'ok':错误}< BR>< BR>
查询资源状态
############################### < BR>
任何资源的状态都可以通过dohaz调用检索。此呼叫提供呼叫者的ID
锁定了资源(如果可用),"?"如果来电者的ID未知,或者
资源未锁定。 < BR>
下面的示例显示锁定的资源。 < BR><…代码块::python
>;>>response=get("http://localhost:8765/dohaz/my/resource")
>;>>response.json()
{u'lockedby':u'?'} < BR>
此示例显示未锁定的资源。 < BR><…代码块::python
>>>response=get("http://localhost:8765/dohaz/some/resource")
>;>>response.json()
{u'lockedby':无} < BR>< BR>
高级使用
----- < BR>
除上述标准功能外,储物柜还支持
拥有资源锁以及锁行为修改的调用方。 < BR>
呼叫者识别
##################### < BR>
在几个基本示例中,返回的lockedby字段仅显示"?"正确地
标识资源锁的所有者调用方在锁定资源时可以提供id。这个
id将在以后的查询中作为lockedby字段返回给canhaz和dohaz。 < BR><…代码块::python
>>response=get("http://localhost:8765/canhaz/this?ID =蒂米""
>;>>response.json()
{u'token':u'15b536b9-97b3-430b-8c5f-14261c97f782',u'ok':真的} < BR>
>>>response=get("http://localhost:8765/dohaz/this")
>;>>response.json()
{u'lockedby':u'timmy} < BR>
id是任意字符串,在锁定资源时是可选的。 < BR>< BR>
锁定行为修改
############################## < BR>
虽然不常见,但您可能需要锁定资源而不锁定其父级或不锁定
锁定其子级。当通过向
坎哈兹的电话。 < BR>
这是一个锁定资源而不锁定其父资源的示例: < BR><…代码块::python
>;>gt;获取("http://localhost:8765/canhaz/foo/bar?lockParents=错误") < BR>
>>>response=get("http://localhost:8765/canhaz/foo")
>;>>response.json()
{u'token':u'd305eb3a-2fec-4db1-9448-47cec24c169f',u'ok':真} < BR>
这是一个锁定资源而不锁定其子资源(ren)的示例: < BR><…代码块::python
>;>gt;获取("http://localhost:8765/canhaz/bar?lockChildren=false") < BR>
>>>response=get("http://localhost:8765/canhaz/bar/foo")
>;>>response.json()
{u'token':u'72ad7aaa-3529-4f84-ae6b-23200fcbb731',u'ok':true} < BR>
如果需要,这些标志可以一起使用。 < BR>< BR>

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
并行处理java。util。同时发生的叉子在游泳池里。常见的并行性准则,用于选择正确的并行度大小   java如何将空白字符追加到指定长度?   安卓应用程序中出现错误,SSLHandshakeException,找不到证书路径的信任锚点   java如何使用JUnit Mockito验证检查方法是否未被调用   java如何使用不同的@RequestMapping解析多个控制器中的静态页面   Selenium中的javascript需要验证搜索结果   访问数据库SQLiteopenHelper方法时java应用程序崩溃(nullpointerexception)   在二叉树中验证最小堆时出现java空指针异常   Java 7的SSL连接失败   java用RestEasyWebTarget替换ProxyFactory不起作用   在Java应用程序中单击“否”按钮后,数组程序冻结(无响应)   数组中的前缀Java初学者前进和   Java HTML解析器,包括脚本标记和LineNumberReader   在java中为长类型数字加前导零   正则表达式无法映射正则表达式java。lang.IllegalArgumentException:模式段中捕获组的数量