在同一台服务器上同时运行相同的Pexpect程序但不同的终端

时间:2015-07-31 15:24:53

标签: python pexpect

我有一个 python pexpect代码让我们说 Program1.py ,它使用pexpect.spawn从每个程序登录到一个路由器,并使用sendline和expect进行必要的操作在pexpect中的模块。

如果我尝试运行同一个程序,从我服务器上的多个提示中,每个程序登录到两个不同的路由器,只有一个程序似乎得到expect()输入,而另一个程序实例在{ {1}} - >阅读child.expect()

实施例

在我的RHEL服务器上的prompt-1中,执行程序以使用ARG登录到路由器X

non_blocing()

在我的RHEL服务器上的Prompt-2中,执行程序以使用ARG登录到路由器Y

bash$ python program1.py 10.11.12.13/2001 configure_MGMT

其中一个程序成功运行,而另一个程序在第一次bash$ python program1.py 20.20.12.13/2020 configure_MGMT 来电时点击TIMEOUT。

这是由于GIL吗?

是否有解决方法?
(我希望避免多处理,因为我的网络服务器处理多处理方面并多次执行相同的程序。)

2 个答案:

答案 0 :(得分:1)

GIL与此无关,因为独立进程不共享GIL。最可能的原因是您的路由器一次只支持一次登录。验证这是问题的最简单方法是通过从两个不同的终端会话同时手动登录到路由器来从等式中删除Python。

答案 1 :(得分:0)

找到答案。由于python程序总是同步执行而不是并行执行,因此当进程等待调度时,pexpect将超时等待输入。

将所有这些作为后台进程并行运行,我们需要使用'&'在执行CLI结束时。

示例:

bash $ python program1.py 20.20.12.13/2020 configure_MGMT&

感谢