pyro4 rpc阻止 -- python 领域 和 asynchronous 领域 和 rpc 领域 和 python-multiprocessing 领域 相关 的问题

Pyro4 RPC blocking


简体版||繁體版
2
vote

问题

中文

我目前正在在高性能数字计算系统上进行开发,将其发布到Web服务器。我们在单独的过程上使用烧瓶来服务网页,以保持一切交互式,并使用WebSockets将数据发送到JS绘图仪。计算也使用多处理来拆分以进行性能原因。

我们目前正在使用pyro4从服务器计算计算中更新的参数。但是,如果每秒的更新数在我们的Pyro4设置对象上变高,则它将启动阻止,并使在我们重新启动服务器之前无法更新任何参数。代理调用是在异步WebSocket回调中进行的。

我们目前没有得到任何回溯,也没有例外,这使得调试这一切棘手。在此上下文中是否有其他人在这种情况下有很多在Pyro经验?

pyro守护程序init代码:

  Pyro4.config.SERVERTYPE = "multiplex" daemon = Pyro4.Daemon() ns = Pyro4.locateNS() settings = cg.Settings(web_opt, src_opt, rec_opt, det_opt) uri = daemon.register(settings) ns.register("cg.settings", uri) daemon.requestLoop()   

设置类:

  class Settings(object):  def __init__(self, web_opt, src_opt, rec_opt, det_opt):     self.pipes = [web_opt, src_opt, rec_opt, det_opt]  def update(self, update):     [pipe.send(update) for pipe in self.pipes]   

代理呼叫:

  def onMessage(self, payload, isBinary):     data = json.loads(payload)     self.factory.content.set_by_uuid(data['id'], data['value'], self.client_address)     settings = Pyro4.Proxy("PYRONAME:cg.settings")     values = self.factory.content.values     settings.update(values)     settings._pyroRelease()   
英文原文

I am currently doing development on a high performance numeric calculations system that posts it results to a web server. We use flask on a seperate process to serve the web page to keep everything interactive and use websockets to send the data to a JS plotter. The calculations are also split using multiprocessing for performance reasons.

We are currently using Pyro4 to get parameters updated in the calculations from the server. However, if the number of updates per second gets high on our Pyro4 settings object it starts blocking and makes it impossible to update any parameters until we restart the server. The proxy calls are made inside of an async websocket callback.

We are currently not getting any tracebacks, nor exceptions which makes debugging this all tricky. Are there any other people that have a lot of experience with Pyro in this context?

Pyro daemon init code:

Pyro4.config.SERVERTYPE = "multiplex" daemon = Pyro4.Daemon() ns = Pyro4.locateNS() settings = cg.Settings(web_opt, src_opt, rec_opt, det_opt) uri = daemon.register(settings) ns.register("cg.settings", uri) daemon.requestLoop() 

Settings class:

class Settings(object):  def __init__(self, web_opt, src_opt, rec_opt, det_opt):     self.pipes = [web_opt, src_opt, rec_opt, det_opt]  def update(self, update):     [pipe.send(update) for pipe in self.pipes] 

Proxy call:

def onMessage(self, payload, isBinary):     data = json.loads(payload)     self.factory.content.set_by_uuid(data['id'], data['value'], self.client_address)     settings = Pyro4.Proxy("PYRONAME:cg.settings")     values = self.factory.content.values     settings.update(values)     settings._pyroRelease() 
</div
           
   
   

回答列表


相关问题

1  如何在Web服务器(Python)中实现多处理?  ( How to implement multi processing in a web server python ) 
我一直在遵循一个教程来编写python webserver: ruslanspivak.com/lsbaws-part3/。 Python Web-Server有一个简单的代码,它应该使用多处理来处理请求 import os import socket import time SERVER_ADDRESS =...

0  多进程类未在实际过程中存储数据  ( Multi process class is not storing data in the actual process ) 
我已经做出了我正在写的更大代码的例子。我想要多个进程来管理100个等级的线程。 我有两个问题,一个是"添加" 方法似乎实际增加了新过程。另一个是,即使是创建的2,3或4个进程,即使是创建的,线程仍然在第一个主要,过程下启动。 以下代码没有显示线程类,但如果您可以帮助解释为什么进程无法正确添加,我可以弄清楚线程部分。 ...

2  使用线程更改代码的结果吗?  ( Does using thread alter the result of your code ) 
所以我写了一个函数,何时调用何时返回字典。这看起来像 def path(image_file): Some function that returns a dictionary return co_ordinates def Draw(): image_file = "Data/t...

1  为什么单个进程可以在Windows子系统上实现100%的多个CPU使用,用于Linux(WSL),但它不能在服务器上ubuntu?  ( Why a single process can achieve multiple cpu usage of 100 on windows subsystem ) 
我想通过Python多处理模块实现并行计算,因此我实现了模拟计算来测试我是否可以使用多个CPU内核。我发现一个非常奇怪的事情是一个过程可以在我的桌面上为Linux(WSL)的Windows子系统实现8个CPU使用率100%,而不是在Lab的服务器上只有一个CPU使用率100%。 像这样: ,这是对比度: ...

3  使用Apply_Async与回调函数进行流程池  ( Using apply async with callback function for a pool of processes ) 
我试图了解多处理池是如何工作的。在以下编程中,我创建了一个4个进程的池。 和我调用 apply_async ,带回调函数,应该更新名为 result_list 的列表 import Queue from multiprocessing import Process from multiprocessing i...

2  使用Windows中的信号中断Python MultiProcessing.Process  ( Interrupt python multiprocessing process using signals in windows ) 
我有一个python脚本,它使用多处理_process类生成一个新进程。这个过程应该永远运行来监控东西。在UNIX上,我现在可以使用OS.KILL()向该特定进程和信号发送信号。在该过程中的信号(...)来实现我的特定中断处理程序。在Windows的事情上不起作用。 我读取了如何使用 popen 。我还可以为进程类指...

1  Python多处理不是将示例代码打印到stdout  ( Python multiprocessing not printing example code to stdout ) 
我正准确地从python 多处理过程文档 。 from multiprocessing import Process def f(name): print('hello', name) if __name__ == '__main__': p = Process(target=f, args=...

0  是否可以使用Namespaceproxy和BaseManager共享一个复杂的对象而无需锁定?  ( Is it possible to share a complex object with namespaceproxy and basemanager wit ) 
编辑: 我已经设法"删除" 其中一个锁,但它仍然很慢。有人知道锁定的位置吗? class NoLock: def __init__(self): pass def __enter__(self): return self def __exit__(self,...

0  如何在Python中的进程的线程中访问管道连接对象?多处理  ( How to access pipe connection object in a thread of a process in python multipr ) 
以下是我的代码 from multiprocessing import Process,Queue,Pipe from threading import Thread import time p,q = Pipe() def bcd(p): print p.recv() def abc(p): ...

0  ProcessPoolExecutor在将脚本运行为EXEC文件时启动N新窗口  ( Processpoolexecutor launch n new windows when running script as exec file ) 
我有一个脚本,在一个线程和计算中启动pyqt gui(多处理计算)。问题是当我将.py文件转换为.exe文件(使用pyinstaller)来自"如果 name ==' main ''和此行为的每个新创建的进程启动命令我只能从.exe文件中重现(从.py文件启动脚本时它的工作正确) 有人遇到过同样的问题吗? 您可以通...




© 2022 it.wenda123.org All Rights Reserved. 问答之家 版权所有