运行 相同的 Pexpect 程序同时在同一台服务器但不同的终端上运行
Running same Pexpect program simultaneously on the same server but differnt terminals
我有一个 python 预期代码 让我们说 Program1.py 从每个程序都使用 pexpect.spawn 并在 pexpect 中使用 sendline 和 expect 模块执行所需的操作。
如果我尝试 运行 同一个程序,从我的服务器上的多个提示,每个程序登录到两个不同的路由器,只有一个程序似乎获得 expect()
输入,而另一个实例程序超时 child.expect()
-> 读取 non_blocing()
示例:
在我的 RHEL 服务器上的 prompt-1 中,我执行程序以使用 ARGs 登录到路由器 X
bash$ python program1.py 10.11.12.13/2001 configure_MGMT
在我的 RHEL 服务器上的 Prompt-2 中,我执行程序以使用 ARGs 登录到路由器 Y
bash$ python program1.py 20.20.12.13/2020 configure_MGMT
其中一个程序 运行 成功,而另一个程序在第一次 child.expect()
调用时超时。
这是因为GIL吗?
有解决办法吗?
(我希望在这里避免多处理,因为我的网络服务器处理多处理方面并多次执行同一个程序。)
GIL与此无关,因为独立进程不共享GIL。最可能的原因是您的路由器一次只支持一次登录。验证这是问题所在的最简单方法是通过同时从两个不同的终端会话手动登录到路由器,从等式中删除 Python。
找到了这个问题的答案。由于 python 程序将始终同步执行而不是并行执行,因此当进程等待被调度时,预期将超时等待输入。
至运行 所有这些都作为后台进程并行执行,我们需要在执行 CLI 的末尾使用“&”。
示例:
bash$ python program1.py 20.20.12.13/2020 configure_MGMT &
谢谢
我有一个 python 预期代码 让我们说 Program1.py 从每个程序都使用 pexpect.spawn 并在 pexpect 中使用 sendline 和 expect 模块执行所需的操作。
如果我尝试 运行 同一个程序,从我的服务器上的多个提示,每个程序登录到两个不同的路由器,只有一个程序似乎获得 expect()
输入,而另一个实例程序超时 child.expect()
-> 读取 non_blocing()
示例:
在我的 RHEL 服务器上的 prompt-1 中,我执行程序以使用 ARGs 登录到路由器 X
bash$ python program1.py 10.11.12.13/2001 configure_MGMT
在我的 RHEL 服务器上的 Prompt-2 中,我执行程序以使用 ARGs 登录到路由器 Y
bash$ python program1.py 20.20.12.13/2020 configure_MGMT
其中一个程序 运行 成功,而另一个程序在第一次 child.expect()
调用时超时。
这是因为GIL吗?
有解决办法吗?
(我希望在这里避免多处理,因为我的网络服务器处理多处理方面并多次执行同一个程序。)
GIL与此无关,因为独立进程不共享GIL。最可能的原因是您的路由器一次只支持一次登录。验证这是问题所在的最简单方法是通过同时从两个不同的终端会话手动登录到路由器,从等式中删除 Python。
找到了这个问题的答案。由于 python 程序将始终同步执行而不是并行执行,因此当进程等待被调度时,预期将超时等待输入。
至运行 所有这些都作为后台进程并行执行,我们需要在执行 CLI 的末尾使用“&”。
示例:
bash$ python program1.py 20.20.12.13/2020 configure_MGMT &
谢谢