我刚刚发现了“特使”模块,一个由请求创建者为python子进程编写的包装器。在
我对“connect”函数有一个问题:每次我使用它,它都会导致一个僵尸进程,我无法获得状态代码或结果。在
c=envoy.connect("ls -al")
c.status_code == None
True
如果我做一个'ps-ef | grep thepid',我会得到一个“失效”的pid。在
我可以通过做一个操作系统。等等()或c_进程。等等(),但我无法获取命令的结果(stdout)。。。在
有什么想法吗?在
Tags:
在您的例子中,您应该使用
run()
方法正如特使文件建议的那样:
但是,如果您希望命令异步运行,可以使用
connect()
后跟block()
一旦调用
^{pr2}$block()
,返回代码就可用了。但是block()会阻塞您的程序,所以逻辑应该是这样的。在^{} (由
envoy.connect()
返回的类型)似乎没有准备好。特别是,如果命令接收/生成足够的(取决于平台)输入/输出,则该命令可能会死锁。在除了调用同样适用于活动进程的
c.block()
之外,还可以删除对该命令的所有引用,并使用del c
来获取僵尸。如果子进程没有死,则在下一个子进程开始时运行清理方法(取决于实现)之前,不会获取这些子进程。在如果
envoy.run()
功能不足以完成您的任务,则可以直接使用subprocess
模块。例如,要将输入传递给多个进程并收集相应的结果,可以使用ThreadPool
和.communicate()
方法:不管最初的顺序如何,孩子睡得越少,其结果就越快提供给父母。在
如果输入/输出超过管道缓冲区,它不会死锁。在
相关问题 更多 >
编程相关推荐