Klayout的进程间通信

lyipc的Python项目详细描述


#Klayout的进程间通信(lyipc)
[![构建状态](https://travis-ci.com/atait/klayout-ipc.svg?branch=master)(https://travis ci.com/atait/klayout ipc)
[![DOI](https://zenodo.org/badge/138979016.svg)(https://zenodo.org/badge/latestdoi/138979016)

[klayout](https://www.klayout.de/index.php)是一个布局编辑器和查看器。它无疑是10<;sup>;0<;sup>;欧元/$–
10<;sup>;4<;sup>;欧元/$范围内性能最高、最先进的布局查看器。Klayout是免费软件。它的编辑功能包括支持python和ruby的通用脚本接口(generic scripting interface,gsi),还有其他一些python脚本项目专门以各种其他方式(例如phidl、gdspy、nazca、matlabgdsphotonics、kicad,集成电路布局的方法主要分为两大类:图形用户界面驱动的、软件宏辅助的交互式设计和脚本驱动的、非交互式编程。后者在脚本(及其库模块)编写完成后更具可重复性、可修改性和可重用性。问题在于开发代码——布局对象状态及其随时间的变化对程序员来说是不透明的。

lyipc的主要应用程序是一个图形化的调试工作流,它使用优秀的klayout查看器,但不一定依赖于Klayout脚本语言或IDE。其思想是在两个进程之间创建一个通信链路:
1。从klayout.app gui中启动的服务器
2。一个客户端,它可以控制klayout.app gui的各个方面,通过分离进程,服务器gui可以完全功能化,初始化一个大的虚拟程序内存,而客户端可以非常轻量级。

![](icons/lyipc.png?raw=true)



[进程1]启动klayout.app
-从菜单项启动端口11078上的简单服务器
2。[进程2:程序员]在Klayout或python中运行python程序
-导入"lyipc"客户端包
-在pdb或spyder等调试器中停止此程序(检查/更改程序变量)
-写入文件"x.gds"
-调用"ipc.load("x.gds")`
3。[进程2:lyipc]lyipc.client模块将
-启动端口11078上的套接字连接
-发送意味着加载
4的命令。[处理1]在接收到连接请求时
-将解析接收到的命令
-执行操作。在这种情况下,将该文件加载到当前视图中
5。[进程2:lyipc]关闭套接字并继续执行

在程序的每个步骤中,从pypi







``sh
` pip install lyipc
`` ` ` `

/>
从github克隆项目您可以选择

``sh
git clone git@github.com:atait/klayout ipc.git
pip install klayout ipc/
```

然后,您必须使用此命令将其安装到klayout中,从0.1.12开始,不再支持此命令。原因是Klayout很难检测在Klayout解释器之外将使用哪个版本的Python。


当重新加载由通信进程而不是人工触发时,这些提示将持续。转到klayout.app的首选项>;应用程序>;基因禁用检查RAL,并取消选中"检查文件更新"框。



在其他选项卡中。强烈建议您启动klayout.app的第二个实例,专门用于服务。这必须从命令行完成。提示:对于unix用户,在路径上设置klayout可执行文件的快捷方式
``sh
ln-s/applications/klayout.app/contents/macos/klayout/usr/local/bin/klayout
````

注意:到目前为止,端口是硬编码的(11078),因此一次只能有一个服务器。通信由客户端作为命令或查询启动。这意味着可以同时使用多个客户端,但除非以某种方式同步,否则它们会发生冲突。

将这些行
``python
import lyipc.client as ipc
ipc.load('mylayout.gds')
````
导入到名为"test lyipc.py"的文件中。

非gui模式``sh
klayout-b-r test lyipc.py
````
前者更快,因为没有创建新的klayout实例,但当然,后者必须用于"pya"才能正常工作。


Klayout和非Klayout布局客户端的使用示例包含在此repo的"示例"文件夹中。




整个晶圆的集成测试可能需要很长时间。然而,它们可以被平行化——在阿姆达尔定律的好的一面。这也与dataprep相关

这里是流程

1。[笔记本电脑]启动为传入连接(防火墙)配置的Klayout IPC
1。[笔记本电脑(或ci)]test命令
1。[笔记本电脑]向远程HPC发送IPC端口信息
1。[笔记本电脑]rsync ref_布局和新代码(仅更改)到远程计算机
-您可能还需要同步lygadgets,或者手动执行
-我们可以用几何体而不是二进制来覆盖rsync的存档检测吗
-不,这是基于文件修改时间,所以我们很好。[笔记本电脑]向远程计算机发送启动测试的命令
1。[远程hpc]使用pytest xdist和klayout tiling在所有核心上运行测试
1。[远程hpc]通过重定向stdout发送进度报告
-管道pytest输出?
1。[远程HPC]如果有错误,将布局对发送到笔记本电脑上的IPC服务器
1。[远程hpc]发送某种完成信号
1。[膝上型电脑]rsyncs运行_布局以进行进一步检查
-仅限于故障?

以下是启用此功能的步骤

在第二台计算机上的lyipc中配置一些内容。发送lyipc命令。首先,在第一台计算机上加载gds。下一步,在带有客户端的本地计算机上与rsync和gds结合使用。加载stdout piping(不要麻烦)
已经开始工作了,但还没有启动。

[笔记本电脑用户]lyipc job script.py
1.[笔记本电脑]rsync script.py
1.[hpc]python script.py
1.[hpc]rsync output.gds

这应该使用容器函数吗?

运行"lytest diff file1.gds file2.gds"。这些文件被传送到远程。XOR在那里运行。检测到错误并将其发送回第一台计算机的Klayout图形用户界面。这将涉及实际的文件传输。

edit:this d我没有在lytest中设置任何内容。这是一个lyipc的问题:`set_target_hostname`和hpc使用'ship_file'来恢复工作。


注意:要发送文件进行测试,调用命令并获取打印输出,rsync(任意方向)--您需要单向rsa授权。如果要运行在本地gui中弹出的远程测试,当前*需要双向rsa授权*。当hpc运行时,它的lytest有球(有点)。它决定何时向lyipc发送一对文件。然后lyipc注意到它必须远程传送这些文件,这需要rsync。嗯,如果lyipc中的qtcspocket可以发回一个通知说:rsync这个东西从我这里来;它已经准备好了。



只需要同步ref_布局。
lytest不仅发送ref_布局,还发送脚本。此脚本布局是远程生成的。xor是远程完成的。



首先,我们将从XDist单独获得好的结果…当涉及到测试,而不是数据准备时。

记住pip install pytest xdist。错误信息没有帮助。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
hbm中的java异常。xml   java如何扩展JavaDoc5.0标准doclet?   java将所有非字母数字更改为+   java如何使用JSP从URL获取参数   把java学校的程序员变成C或C++程序员有多难?   java使用HTML获取表内容   java在JPanel中使用repaint()方法而不删除已绘制的内容   rest如何在Java中动态映射同一父类的子对象列表   如果协议不是http或https,java如何解析URL?   java删除文本时如何在eclipse中隐藏建议框?   java代码名1 GPS跟踪器   java寻找骑士所有独特的可能动作   从一个管道到另一个进程的java InputStream仍然被阻塞   java在阶段后将子项添加到窗格。show()   java如何确保在子对象中调用超级方法?   java从json对象获取值   java使用多线程读取文件   java Struts 1.1+Hibernate 3.2集成