跳转到主要内容

使用ZMQ进行数组数据的远程函数调用

项目描述

PyPI

🙅 Zerofun

使用ZMQ进行数组数据的远程函数调用。

注意:Zerofun已重新编写,不再使用ZMQ,而是使用原始Python套接字,现在称为Portal。您可以继续使用Zerofun,但它将不再接收更新。要抑制此信息,请安装zerofun==2.3.1。要升级,请运行pip install portal并访问github.com/danijar/portal。API几乎相同,但允许更灵活的函数参数,并提供更高的性能和可靠性。

概述

Zerofun提供了一个您可以将函数绑定到的Server和一个可以调用消息并接收其结果的Client。函数输入和结果都是平铺的NumPy数组的字典。数据以高效的方式发送,无需序列化,以最大化吞吐量。

安装

pip install zerofun

示例

此示例在同一个Python程序中使用子进程运行服务器和客户端,但它们也可以是运行在不同机器上的独立Python脚本。

def server():
  import zerofun
  server = zerofun.Server('tcp://*:2222')
  server.bind('add', lambda data: {'result': data['foo'] + data['bar']})
  server.bind('msg', lambda data: print('Message from client:', data['msg']))
  server.run()

def client():
  import zerofun
  client = zerofun.Client('tcp://:2222')
  client.connect()
  future = client.add({'foo': 1, 'bar': 1})
  result = future.result()
  print(result)  # {'result': 2}
  client.msg({'msg': 'Hello World'})

if __name__ == '__main__':
  import zerofun
  server_proc = zerofun.Process(server, start=True)
  client_proc = zerofun.Process(client, start=True)
  client_proc.join()
  server_proc.terminate()

特性

提供了一些生产力和性能特性

  • 请求批处理:服务器可以批量处理请求,以便用户函数接收堆叠的数组字典,并将函数结果分割并发送回相应的客户端。
  • 多线程:服务器可以使用线程池并行处理多个请求。可选地,每个函数也可以请求自己的线程池,以便函数可以阻塞(例如,进行速率限制),而不会阻塞其他函数。
  • 异步客户端:客户端可以通过使用Future对象发送多个重叠请求,并在需要时等待结果。最大并发请求数量可以限制,以避免当服务器比客户端慢时请求积累。
  • 错误处理:在服务器函数中引发的异常会报告给客户端,并在future.result()中引发,或者如果用户没有存储未来对象,则在下一个请求中引发。工作异常也可以通过使用server.check()在服务器应用程序中重新引发。
  • 心跳:当客户端一段时间内没有从服务器收到结果时,可以发送ping请求,这样就可以等待计算时间较长的结果,而不必假设连接丢失。
  • 并发性:具有异常转发功能的ThreadProcess实现,可以被父进程强制终止,这是Python线程原生不支持的功能。还有可停止的线程和进程,可用于协作关闭。
  • 降低GIL负载:ProcServer的行为与正常Server相同,但使用后台进程批量请求并分发结果,大大减少了主进程中服务器工作者的GIL负载。

问题

请为每个问题打开一个GitHub问题。随着时间的推移,我们将把常见问题添加到README中。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

zerofun-2.4.0.tar.gz (18.5 kB 查看哈希值)

上传时间

由以下支持