gpt4 book ai didi

python - 如何在subprocess.Popen.communicate()中释放GIL

转载 作者:太空宇宙 更新时间:2023-11-03 16:53:37 24 4
gpt4 key购买 nike

我有 2 个 threading.Thread,每个调用:

p = subprocess.Popen(...)
o,e = p.communicate()

调用p.communicate()时,似乎没有释放GIL。在上面的代码中,线程变成管道化的,只有当第一个线程完成时,第二个线程才能启动,这不是所需的行为。

有没有办法以释放GIL的方式等待Popen

最佳答案

使用多处理模块而不是线程

看简介第一句https://docs.python.org/2/library/multiprocessing.html .

或者,如果您仍然想使用线程,请不要调用 communicate(),而是使用 stdin 和 stdout 管道。您仍然必须小心,因为您可能会无意中以这种方式锁定进程。例如,如果您在没有可用数据时尝试从进程的 stdout 读取数据,就会发生这种情况。您必须确切地知道数据何时可用,以及有多少字节可用(这不完全是轮询)。

p = subprocess.Popen( ..., stdin=subprocess.PIPE, stdout=subprocess.PIPE )
p.stdin.write( ... )
n = 1
x = p.stdout.read(n) # this will lock if less than N bytes are available

关于python - 如何在subprocess.Popen.communicate()中释放GIL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35640929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com