用于简单绘图的异步客户机服务器库。
asyncplot的Python项目详细描述
异步绘图仪
简单的双进程客户机/服务器绘图,具有以下功能:
- 绘图不会减慢计算速度。
- 用户维护计算控制(即键盘中断工作)。
- 从服务器自动启动客户端。
- 用户在(picklable)类中定义打印代码,并且 向server()构造函数提供类。服务器通过pickled绘图仪 在新的python解释器中启动客户端进程时发送给客户端。 客户端的python解释器命令行选项传递给服务器 实例化时的构造函数。默认值为: (例如。[“ipython”、“–pylab=osx”、“-c”])
待办事项
使用sockets的异步绘制与单独进程的原型
仍然需要:
- 全面测试
- 日志记录(以调试模式打印调试消息以检查网络问题)
- 配置文件性能。
- 配置(主机名、端口规格等)
我认为这些问题已经解决了,但它们需要测试:
- 套接字缓冲区溢出(recv)
- 清除线程和套接字命令行终止
- 错误处理。例如,当客户端断开连接时,服务器侦听将继续, 网络错误
- 多个客户端(打印)
其他设计方法
线程解决方案
最简单的方法是多线程方法。原则上,可以运行 在主线程中计算并在单独线程中打印。这个 解决方案是在thread.py中绘制的,但在大多数matplotlib后端失败 因为他们需要在主线程中运行。快速解决是 在辅助线程中运行计算,但这会阻止用户 能够中断计算。
python gil的一个很好的特性是 共享数据(谨慎的解决方案需要锁等)
多处理解决方案
同样的解决方案也适用于multiprocessing,但在我的 开发平台(Mac OS X 10.5),错误如下:
The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec(). Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.
单独的过程
似乎最可靠的解决方案是有计算和绘图仪 在完全独立的进程中运行。这还有一个额外的好处:
- 用户可以远程绘图。
这里需要解决的一个问题(以及multiprocessing解决方案) 是数据的复制。一个常见的用例是绘图仪可能速度较慢 而不是计算。因此,可以丢弃中间数据,而不应该 通过网络发送。
其他方法
似乎应该可以用IPython来做这件事,但我没有 找到了一个简单的方法。