Pysyft客户端和服务器

时间:2020-03-26 11:17:03

标签: websocket federated-learning pysyft

这个问题是关于我的使用pysyft库进行联合学习的项目的,但是那些了解websockets的人也可以提供帮助,因为pysyft使用websocket进行服务器和客户端交互。

首先,我对服务器和客户端交互存在问题。我创建了一个仪表板来启动pysyft服务器和连接到上述服务器的pysyft客户端。但是,我有一种情况,我希望客户端不时与服务器断开连接(手动断开连接),以便更改模型参数。

我的解决方案是在pysyft websocketClientWorker上执行close(),然后在websocket对象上调用shutdown()函数。我认为这样做会关闭客户端和服务器之间的连接。在对模型参数进行任何更改之后。我将再次重新创建pysyft websocketClientWorker对象,并再次执行模型训练。但是,我遇到的问题是: websocket._exceptions.WebSocketConnectionClosedException:套接字已关闭。在数据加载器的迭代过程中将抛出此异常(尽管已成功连接到服务器)。 / p>

也许有更好的方法可以解决这种情况,或者我是否缺少对Websocket的某些基本了解。任何帮助将不胜感激。谢谢:)

1 个答案:

答案 0 :(得分:1)

经过几天对pysyft库的全面检查,我设法找到了问题的解决方案。事实证明,Websocket连接和重新连接没有问题。显然,websocketclient(基类)的超类包含一个工作程序注册表,当auto_add变量设置为True时,该注册表会缓存websocketclient对象。该注册表由websocketclient ID索引,因此,如果ID相同,则不会在注册表中替换websocketclient对象的重新创建。因此,这解释了“套接字已关闭”的问题,因为它引用了我已关闭的先前的websocketclient连接。解决方案是在关闭其连接之前,简单地在websocketclient对象上调用remove_worker_from_local_worker_registry()方法。