问题标签 [perspective-broker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
612 浏览

python - 使用透视代理传递多个对象(复杂类型)

每当我尝试传递具有第二个对象(bClass)的属性的对象(aClass)时,我得到:

Unpersistable('Unpersistable 数据:类 amodule.bClass 的实例被认为不安全')

aClass 是可复制的且不可复制的,而 bClass 则不是。

这是我的代码:

服务器.py:

一个模块.py:

无论如何要解开 aClass 和它可以包含的所有对象吗?因为解冻包含的对象令人头疼,并且可能变成脏代码......

0 投票
1 回答
785 浏览

python - 在 Twisted 透视代理中调用客户端的远程方法

我正在使用twisted 的透视代理在客户端和服务器之间进行通信。客户端从服务器请求远程方法“remote_ftp_listen”。这会导致 PB 服务器启动 FTP 连接并等待直到在目录中找到与某种模式匹配的文件,然后 PB 服务器必须通知客户端该事件(在所需的 ftp 目录中找到文件)。

如何实现这种反向调用(PB Server > PB client)?比如告诉服务器它必须在客户端回调一个方法......如果通过 PB 不可能,那么你会建议做什么来实现它?

0 投票
1 回答
269 浏览

python - Perspective Broker 可以通过 stdio 而不是 TCP 使用吗?

我在进程和子进程之间使用 Twisted 的 Perspective Broker 进行 RMI。

与其监听 TCP 套接字(例如通过传递reactor.listenTCP()的实例PBServerFactory)并让子进程连接到它,我更愿意使用子进程的标准输入和标准输出。

我找到了twisted.internet.stdio.StandardIO,但如果这是要走的路,我不确定如何设置所有内容。

在 stdio 上使用 PB 而不是 TCP 是否可行?如何?


等等,为什么?

子进程用于运行不受信任的代码。它是沙盒的,但需要能够以有限的方式与父进程通信。到目前为止,某种形式的 RMI 是针对特定用例的最简洁的选项,并且 PB 具有看起来正确的访问模型。但是沙盒进程没有——也不应该需要——网络访问。RMI 是它与外部世界的唯一通信,通过 stdin/stdout 进行管道传输似乎是一种干净的业务方式。

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

0 投票
1 回答
90 浏览

python - 为什么 pb.Viewable 中的透视参数作为 None 传递?

我试图了解如何让服务器知道在扭曲的透视代理中哪个客户端正在发出远程请求。我想我应该使用twisted.spread.pb.Viewable这个,但是当我尝试 Viewableview_*方法中的透视参数是 None 时。

我运行这个服务器

和这个客户

服务器的输出是

为什么透视参数没有?

0 投票
1 回答
425 浏览

python - 努力理解 Twisted 和特别是 pb

有人可以解释以下之间的区别。我真的很难掌握 Deferred 的概念,我以为我已经掌握了它,因为我整天都在做例子。但我想我一定是代码盲。我敢肯定它真的很简单。

这行得通。

而这并没有

我一生都无法弄清楚为什么它会因以下错误而崩溃:

服务器端代码是

0 投票
1 回答
412 浏览

python - 跟踪连接到 Twisted PB 服务器的客户端

我正在使用 Twisted PB 编写一些备份软件来获取与服务器之间的信息,并且一切运行良好。

我想做的是跟踪哪些客户端连接到服务器。我已经设法在客户端连接时记录了连接的 IP 地址。最初,客户端可以访问只有一个方法的 pb.Root 对象,该方法返回另一个对象,该对象可以访问存储的数据。

我想做的是更新已连接客户端的连接详细信息,以包括在发送到服务器的调用中发送的一些信息。

这是我的客户端日志记录代码

这是初始连接方法的代码

我不确定如何让客户端断开连接也被记录。如果有人可以提供帮助,我将不胜感激

0 投票
1 回答
234 浏览

python - 扭曲的 inlineCallbacks 和远程生成器

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

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

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

我将如何在已使用 inlineCallbacks 的情况下编写它?是否真的有可能,如果我返回一个值。会像以下工作吗?

0 投票
1 回答
215 浏览

python-2.7 - Python 内存使用量不会下降

我正在编写一个扭曲的 PB 应用程序,它似乎使用了大量的内存,当用户断开连接时似乎永远不会释放。

我有一个 pb.Root 对象,客户端连接到该对象并调用一个返回 pb.Referenceable 对象的远程方法,该对象在创建时将大量信息(大约 2GB 的数据)读入内存以加快操作速度。该对象以及有关客户端的一些其他信息被插入到列表中。

当客户端与服务器断开连接时,我对该对象调用一些清理操作以删除对正在存储的缓存对象的引用。chunkCache 是我存储数据的字典。

一旦客户端根据 top never drop 断开内存使用情况,它仍然会显示 2Gb。

我应该担心这一点,还是会在需要时释放分配的内存,或者如果没有任何想法,我该如何释放这些内存?它是在创建对象时创建的,而不是在其他任何地方传递。

在该对象内部,我确实有一个 deferToThread 调用,这是否会阻止正在释放的项目?

我在 Linux 上使用 python 2.7。

更新:

我很困惑,我刚刚__del__向我的对象添加了自定义方法并在其中放置了一个打印语句,它们正在被删除,那么为什么内存使用量永远不会下降?

谢谢

院长

0 投票
0 回答
62 浏览

twisted - 包含 PB Referenceable 的 Twisted PB Spawnprocess

我正在编写一个消耗大量内存的服务器应用程序,我有一个问题,python 没有将内存返回给操作系统,所以随着时间的推移,我的应用程序消耗越来越多的内存。我已经做了很多测试,并确认我正在使用的大型对象正在正确释放,所以这是一个 python 问题。

我发现的一种解决方法是在一个单独的进程中完成繁重的内存工作,然后在我完成后终止该进程。但是内存繁重的操作总是在客户端连接时发生。

我使用 Twisted Perspective Broker 编写服务器来处理客户端/服务器通信,它工作正常。我想要实现的是连接到服务器,一旦进行了一些身份验证,就会产生一个在用户连接时一直处于活动状态的进程,然后在用户断开连接时停止该进程,这应该可以解决我的内存问题。

我正在尝试找出处理此过程的最佳方法。我可以用来reactor.spawnprocess在连接时运行另一个进程,但我不确定将 PB 调用代理到该子进程的最佳方法,

你能提供的任何建议都会非常好。

0 投票
2 回答
92 浏览

python - 为什么在 twisted 的 pb 系统中创建虚拟对象?

如下所示,在 中twisted.spread.flavors.RemoteCache.unjellyFor,我们创建了一个名为的虚拟对象cProxy并将其返回给客户端代码的其余部分,而不是返回self

_newDummyLike 的主体如下所示:

由于虚拟对象与“真实”对象cProxy共享它的__dict____class__,因此我根本看不出制作虚拟对象的意义。为什么要创建假人?