案件
我在服务器进程中使用进程内* Java RMI 注册表。
我在注册表中绑定了 1 个对象。
我的客户端进程连接并查找绑定和传递的远程对象。
现在我希望服务器进程完全关闭,即不应存在更多守护线程。使用 RMI,我在服务器进程中的一个对象上调用“close”,问题是这个“close”方法实际上必须做什么。
问题
如何确保使用 RMI 导出对象的进程中没有运行非守护线程?
据我所知,我必须取消导出**所有导出的对象才能关闭 JVM?由于许多对象已通过 RMI 传递,因此我必须维护这组对象并取消导出**每个对象。
我读过任何导出的对象在垃圾收集时都应该取消导出自身(现在找不到引用),但我的经验告诉我,某些对象(尤其是分布的?)可能需要很长时间才能被垃圾收集,所以这是不是一个真正的选择。
我将在 Keras 中训练的模型保存为 .h5 文件。当尝试在分布式设置中加载它时,我收到错误:
InvalidArgumentError(请参阅上面的回溯):无法将设备分配给节点“policy/dense_2_b”:无法满足显式设备规范“/job:ps/task:0”,因为在此过程中没有注册与该规范匹配的设备;可用设备:/job:localhost/replica:0/task:0/cpu:0
似乎 .h5 文件中的变量以某种方式分配给具有作业“localhost”的特定设备。因此,当我尝试将其加载到参数服务器上时,我收到错误。
有人能澄清如何解决这个问题吗?我可能应该首先加载 keras 模型而不启动服务器,然后在参数服务器上重新加载它。但细节我不清楚..
我有一个 TensorFlow 集群,能够对我的模型执行分布式训练。我使用tf.estimator、tf.estimator.train_and_evaluate以及配置的TF_CONFIG。
虽然我可以使用以下命令在任意机器上进行评估evaluator,但评估仍然只发生在机器上。因此,我的训练非常快,因为它是在多台机器上进行的,而评估却很慢。
在训练过程中是否可以将评估分布在多台机器上?
非常感谢你的回答。
任何人都可以告诉我如何使用 dask 在数据框中选择带有“loc”的一列?
作为旁注,当我使用 dd.read_csv 加载数据帧时,标题等于“None”,列名称从零开始到 131094。我即将选择列名称为 131094 的最后一列,我得到错误。
代码:
> import dask.dataframe as dd
> df = dd.read_csv('filename.csv', header=None)
> y = df.loc['131094']
Run Code Online (Sandbox Code Playgroud)
错误:
文件“/usr/local/dask-2018-08-22/lib/python2.7/site-packages/dask-0.5.0-py2.7.egg/dask/dataframe/core.py”,第180行,位于_loc“无法在没有已知分区的情况下在 DataFrame 上使用 loc”)ValueError:无法在没有已知分区的情况下在 DataFrame 上使用 loc
根据此指南http://dask.pydata.org/en/latest/dataframe-indexing.html#positional-indexing,我的代码应该可以正常工作,但不知道是什么导致了问题。
目前正在阅读有关 RPC 和 RMI 的内容,我对它们之间的区别有点困惑。
在实现 RMI 和 gRPC 等时,语法基本相同。
它们都有确定方法参数和响应的接口。
它们都可以发送参数中的对象(Java RMI 本地执行此操作,C# gRPC 使用 proto)。
它们都通过某个对象上的方法调用(基于接口)来执行对服务器的请求。
那么区别是什么呢?客户端和服务器之间的数据传输过程是如何发生的?
从表面上看,RMI只是RPC的Java实现,而gRPC是C#实现。
两者有什么区别?表面上的协议看起来不同,但我想了解两者之间真正的不同之处以及为什么它们不等效。
信息:
$ julia --version
julia version 1.6.0
$ lscpu
~/root/MyPackage$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 39 bits physical, 48 bits virtual
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 158
Model name: Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
...
Run Code Online (Sandbox Code Playgroud)
假设我想要以下包结构,并且想要使用 ReTest 的并行测试(我的问题似乎是代码加载在分布式中的工作方式,因此这实际上并不是 ReTest 特定的问题)。
| root/
| MyPackage/
| Project.toml
| Manifest.toml
| src/ …Run Code Online (Sandbox Code Playgroud) 我一直在评估ActiveMQ作为候选消息代理.我编写了一些测试代码,试图了解ActiveMQ的性能限制.
我可以通过尽快发送消息来在代理中生成故障状态,如下所示:
try {
while(true) {
byte[] payload = new byte[(int) (Math.random() * 16384)];
BytesMessage message = session.createBytesMessage();
message.writeBytes(payload);
producer.send(message);
} catch (JMSException ex) { ... }
Run Code Online (Sandbox Code Playgroud)
我很惊讶这条线
producer.send(message);
Run Code Online (Sandbox Code Playgroud)
当经纪人进入失败状态时阻止.我希望会抛出一些异常,因此会有一些迹象表明经纪人已经失败了.
我意识到我的测试代码是在向代理发送垃圾邮件,我希望代理失败.但是,我更希望经纪人"大声"失败而不是简单地阻止.
这是不切实际的期望吗?
更新:
Uri的回答引用了3月提交的ActiveMQ错误报告.错误描述包括一个听起来像我正在寻找的提案:"如果传输上的请求超时(这是为了捕获故障情况,那么预计不会合理发生的事情),事情就会产生错误而不是建立等待线程."
但是,在8个月之后,该错误目前未通过一次投票分配.所以我想这个问题仍然存在,这是ActiveMQ应该(将会)实现的吗?
我正在开发一个分散的Erlang应用程序.我目前正在使用单个PC并通过erl使用-sname标志初始化来创建多个节点.
当我spawn/4在其主节点上使用进程生成进程时,我可以看到io:format/2该进程中的调用在其主erl实例中生成的输出.
当我通过spawn/4组合使用远程生成进程时register_name,输出io:format/2有时会重定向回到进行erl远程spawn/4调用的实例,有时仍然完全不可见.
类似地,当我使用时rpc:call/4,io:format/2调用的输出被重定向回到进行erl`rpc:call/4'调用的实例.
如何获得将调试输出发送回其父erl实例的进程?
哈德森是复杂C++构建的正确工具吗?
我有一个大约4个小时的C++构建.编译和打包大约需要1/2的时间,测试会消耗另一半.目前,我们正在使用一个自行开发的系统,但是因为我们将它用于所有的java版本,所以有一些移动要去哈德森.
我的问题是持续集成不是很频繁......每隔4小时连续一次.我想要一个工具,让我以可理解的方式并行化构建.
Hudson非常适合小型构建或java构建,我坐在一个大型maven项目的顶部,但我认为它不会很好地适用于复杂的c ++构建.
你有什么经历?