栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

阻塞和非阻塞子流程调用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

阻塞和非阻塞子流程调用

Popen
是非阻塞的。
call
并且
check_call
正在封锁。您可以
Popen
通过调用其实例
wait
communicate
方法来制作实例块。

如果您查看源代码,则会看到

call
calls
Popen(...).wait()
,这就是它被阻止的原因。
check_call
call
call
,这也是它也会阻止的原因。

严格来说,

shell=True
与阻塞问题正交。但是,这
shell=True
会导致Python执行shell,然后在shell中运行命令。如果使用阻塞调用,则该调用将在
外壳程序 完成时返回。由于外壳程序可能会生成一个子进程来运行命令,因此外壳程序可能会在生成的子进程之前完成。例如,

import subprocessimport timeproc = subprocess.Popen('ls -lRa /', shell=True)time.sleep(3)proc.terminate()proc.wait()

这里生成了两个进程:Popen生成了一个运行Shell的子进程。外壳反过来产生一个正在运行的子进程

ls

proc.terminate()
杀死外壳程序,但子进程
ls
仍在运行。(这是由丰富的输出表现,在python脚本结束后还是一样。准备杀
ls
pkillls
。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/660136.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号