我完全混淆了subprocess.call()
,子进程。popen()
,subprocess.check_call()
。
哪个是阻塞,哪个不是?
我的意思是如果我使用子进程。popen()
父进程是否等待子进程返回/退出
才继续执行。
如何shell=True
影响这些调用?
Popen
是非阻塞的<代码>呼叫和检查呼叫
被阻塞。您可以通过调用其wait
或communicate
方法来创建Popen
实例块。
如果您查看源代码,您将看到call
调用Popen(...)。等待()
,这就是它阻塞的原因。check_call
调用call
,这也是它阻塞的原因。
严格地说,shell=True
与阻塞问题是正交的。但是,shell=True
会导致Python执行shell,然后在shell中运行命令。如果使用阻塞调用,则该调用将在shell完成时返回。由于shell可能会生成一个子进程来运行命令,因此shell可能会在生成的子进程之前完成。例如
import subprocess
import time
proc = subprocess.Popen('ls -lRa /', shell=True)
time.sleep(3)
proc.terminate()
proc.wait()
这里产生了两个进程:Popen产生一个运行shell的子进程。shell依次生成一个子进程,该子进程运行ls
<代码>过程。terminate()终止shell,但运行ls的子进程仍保留。(即使在python脚本结束之后,也可以通过大量的输出来证明这一点。准备好用pkill ls
杀死ls
)
我试图做一个非阻塞子进程调用,从我的main.py程序运行slave.py脚本。我需要通过args从main.pyslave.py一次,当它(slave.py)首次启动通过subprocess.call后,slave.py运行一段时间,然后退出。 还有我的奴隶剧本 现在是奴隶。py块主要。py从运行它的其余任务开始,我只需要一个slave。py独立于main。py,一旦我把args传递给它。这两个
本文向大家介绍node.js回调函数之阻塞调用与非阻塞调用,包括了node.js回调函数之阻塞调用与非阻塞调用的使用技巧和注意事项,需要的朋友参考一下 首先,node.js作为javascript运行平台,它采用了事件驱动和异步编程的方式,通过事件注册和异步函数,开发人员可以提高资源利用率,服务器的性能也能得到改善。其次,对于前端人来说,node.js作为js的运行平台,我们可以通过编写系统级或者
非阻塞 IO 仅对在 Servlet 和 Filter(2.3.3.3节定义的,“异步处理”)中的异步请求处理和升级处理(2.3.3.5节定义的,“升级处理”)有效。否则,当调用 ServletInputStream.setReadListener 或ServletOutputStream.setWriteListener 方法时将抛出IllegalStateException。为了支持在 Ser
Web 容器中的非阻塞请求处理有助于提高对改善 Web 容器可扩展性不断增加的需求,增加 Web 容器可同时处理请求的连接数量。servlet 容器的非阻塞 IO 允许开发人员在数据可用时读取数据或在数据可写时写数据。非阻塞 IO 仅对在 Servlet 和 Filter(2.3.3.3节定义的,“异步处理”)中的异步请求处理和升级处理(2.3.3.5节定义的,“升级处理”)有效。否则,当调用 S
问题内容: 我有这段代码可以在Linux中从Serial读取,但是我不知道在读取SerialPort时阻塞和非阻塞之间有什么区别,在哪种情况下哪个更好? 问题答案: 您提到的代码是IMO编码和注释不当的代码。该代码不符合POSIX的可移植性惯例,如正确设置终端模式和POSIX操作系统的串行编程指南中所述。该代码没有提到它使用非规范(也称为原始)模式,并且重用了“阻塞”和“非阻塞”术语来描述 VMI
问题内容: 我在获取ncurses的getch()阻止时遇到了一些问题。默认操作似乎是非阻塞的(或者我错过了一些初始化)?我希望它可以像Windows中的getch()一样工作。我尝试了各种版本的 (并非同时全部)。如果可能的话,我宁愿不(明确地)使用any 。一个围绕残培环路(),检查特定的返回值是OK了。 问题答案: curses库是一揽子交易。如果不正确初始化库,您不能仅仅提出一个例程并希望