Roa*_*ner 4 python subprocess windows-subsystem-for-linux
我有这个subprocess.Popen()上下文管理器:
with Popen(
args=command, shell=False, stdout=PIPE, bufsize=1, universal_newlines=True
) as process:
# TIMING
start = timer()
lines = list(process.stdout)
end = timer()
print('Time taken:', end - start) # 53.662078000000065 seconds -> Linux
for _ in tqdm(iterable=lines, total=len(lines)):
sleep(0.1)
if process.returncode != 0:
raise CalledProcessError(returncode=process.returncode, cmd=process.args)
Run Code Online (Sandbox Code Playgroud)
list(process.stdout)在 WSL Linux 环境中运行时,处理时间似乎需要 53 秒。然而,当我在Windows环境中运行它时,只需要0.6秒。我觉得很奇怪为什么时间安排如此不同。
我尝试使用subprocess.run()andsubprocess.check_output()代替,但它们在处理循环之前仍然会导致相同的长时间滞后tqdm()。
我在这里错过了什么吗?我尝试查看文档以了解 Windows 与 WSL Linux 环境中使用的差异subprocess.Popen(),但我仍然不确定问题是什么。也许list(process.stdout)这里是不必要的,并且有更好的方法来存储来自标准输出的行。
任何形式的指导都会非常有帮助。
您需要在 2019 年第三季度使用 WSL2 重新评估该性能问题。
\n\n\n\n\n\n这个新架构中的变化将实现:文件系统性能的显着提高以及完整的系统调用兼容性,这意味着您可以在 WSL 2 中运行更多 Linux 应用程序,例如 Docker。
\n\n\n\n
git clone诸如、npm install、apt update、等文件密集型操作apt upgrade都会明显更快。
\n 实际速度提升将取决于您运行的应用程序\xe2\x80\x99 以及它与文件系统的交互方式。
\n 我们\xe2\x80\x99 运行的初始测试显示,在解压压缩的 tarball 时,WSL 2 的运行速度比 WSL 1 快 20 倍,在使用 和以及git clone在各种项目中运行时速度快约 2-5 倍。npm installcmakeLinux 二进制文件使用系统调用来执行许多功能,例如访问文件、请求内存、创建进程等。
\n
\n 在 WSL 1 中,我们创建了一个翻译层,用于解释许多此类系统调用并允许它们在 Windows NT 内核上工作。然而,\xe2\x80\x99 实现所有这些系统调用具有挑战性,导致某些应用程序无法在 WSL 1 中运行。
\n 现在 WSL 2 包含自己的 Linux 内核,它具有完整的系统调用兼容性。
| 归档时间: |
|
| 查看次数: |
4132 次 |
| 最近记录: |