标签: perspective-broker

可以在stdio而不是TCP上使用Perspective Broker吗?

我在进程和子进程之间使用Twisted的Perspective Broker for RMI.

而不是监听TCP套接字(例如通过传递reactor.listenTCP()实例PBServerFactory)并让子进程连接到它,我宁愿使用子进程的stdin和stdout.

我找到了twisted.internet.stdio.StandardIO,但如果这是要走的路,我不知道如何设置一切.

使用PB over stdio而不是TCP是否可行?怎么样?


等等,为什么?

子进程用于运行不受信任的代码.它是沙箱,但需要能够以有限的方式与父进程通信.到目前为止,某种形式的RMI是特定用例的最干净选项,PB具有看起来正确的访问模型.但沙盒过程没有 - 也不应该 - 网络访问.RMI是它与外部世界的唯一沟通,通过stdin/stdout进行管理似乎是一种干净的经营方式.

但如果我没有以正确的方式解决这个问题,那也是一个非常有效的答案.

python twisted perspective-broker

5
推荐指数
1
解决办法
259
查看次数

扭曲的inlineCallbacks和远程生成器

我在我的代码中使用了defer.inlineCallbacks,因为我发现它比使用addCallbacks更容易阅读和调试.

我正在使用PB,我在将数据返回给客户端时遇到了问题.数据大小约为18Mb,由于返回的字符串长度,我得到一个失败的BananaError.

我想要做的是编写一个生成器,这样我就可以继续调用函数并在每次调用函数时返回一些数据.

如何使用已经使用的inlineCallbacks来编写它?它实际上是否可能,如果我返回一个值.会有类似下面的工作吗?

@defer.inlineCallbacks
def getLatestVersions(self):
    returnlist = []
    try:
        latest_versions = yield self.cur.runQuery("""SELECT id, filename,path,attributes ,MAX(version) ,deleted ,snapshot , modified, size, hash, 
                           chunk_table, added, isDir, isSymlink, enchash from files group by filename, path""")
    except:
        logger.exception("problem querying latest versions")

    for result in latest_versions:
        returnlist.append(result)
        if len(return_list) >= 10:
            yield return_list
            returnlist = [] 
    yield returnlist
Run Code Online (Sandbox Code Playgroud)

python twisted perspective-broker

5
推荐指数
1
解决办法
224
查看次数

标签 统计

perspective-broker ×2

python ×2

twisted ×2