首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

读取Python子进程时进程OutputStream挂起

问题:读取Python子进程时进程OutputStream挂起是什么原因?

答案:当读取Python子进程的输出流时,如果输出流中的数据量超过了缓冲区的大小,或者子进程输出的数据没有被及时读取,就可能导致进程的输出流挂起。

子进程的输出流会使用操作系统提供的缓冲区来存储输出的数据。当数据被写入输出流时,首先会被写入缓冲区,然后由父进程读取。如果子进程的输出数据量超过了缓冲区的大小,缓冲区就会被填满,此时子进程会阻塞等待直到缓冲区的数据被读取。如果父进程没有及时读取缓冲区的数据,就会导致子进程的输出流挂起。

解决这个问题的方法是使用合适的读取方式来读取子进程的输出流,以及合理地处理缓冲区中的数据。

以下是一些常见的处理子进程输出流挂起的方法:

  1. 使用适当的读取方式:可以使用Python的subprocess模块来启动子进程,并使用communicate()方法来读取子进程的输出。这个方法会等待子进程结束,并一次性返回子进程的输出,避免了缓冲区填满导致挂起的问题。
  2. 增加缓冲区大小:可以通过设置subprocess.Popen的bufsize参数来增加缓冲区的大小,以容纳更多的输出数据,减少挂起的可能性。
  3. 及时读取输出数据:在读取子进程的输出流时,要保证及时读取缓冲区中的数据,避免缓冲区被填满。可以使用循环读取的方式,按照一定大小的块读取数据,并及时处理这些数据。

腾讯云相关产品推荐: 在腾讯云上,可以使用云服务器(CVM)来运行Python子进程,并通过读取子进程的输出流来获取输出结果。同时,腾讯云提供了多种存储服务,如对象存储(COS)和文件存储(CFS),可以用来存储子进程的输出数据。此外,腾讯云还提供了人工智能(AI)和物联网(IoT)相关的产品和服务,可以用于处理和分析子进程的输出数据。

腾讯云云服务器(CVM)产品介绍链接:https://cloud.tencent.com/product/cvm 腾讯云对象存储(COS)产品介绍链接:https://cloud.tencent.com/product/cos 腾讯云文件存储(CFS)产品介绍链接:https://cloud.tencent.com/product/cfs 腾讯云人工智能(AI)产品介绍链接:https://cloud.tencent.com/product/ai 腾讯云物联网(IoT)产品介绍链接:https://cloud.tencent.com/product/iot

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python0031_挂起进程_恢复进程_进程切换

切换的方法比较简单 ctrl + z 把当前进程 从 前台切换到 后台并暂停简单来说就是不给他用cpu了suspended(挂起了)​编辑可以把后台进程切换回前台吗?...挂起 将show_time.py挂起后 重新编辑show_time.py每行输出一个数字数字自增#!...进程 因为我们启动 python3 show_time.py 的时候 是在修改之前 从硬盘读取 show_time.py 放入内存的时候 还没有被修改成 要输出数字编号 这个进程在内存中 始终还是原来调用时的样子也就是修改前的样子...暂停 运行程序后 挂起进程等待一段时间恢复进程​编辑 还是从5开始 没有在后面偷偷跑 如果我就想让这个进程 在后台偷偷跑呢?...bg 先ctrl + z 挂起进程 然后运行 bg​编辑程序继续跑起来而且不断输出到标准输出流甚至连ctrl + c 都无法结束进程了这可怎么办呢?

3.8K00
  • 进程退出如何确保进程退出?

    前言 进程退出的时候,父进程能够收到进程退出的信号,便于管理,但是有时候又需要在父进程退出的时候,进程也退出,该怎么办呢? 父进程退出进程会如何?...一般情况下,父进程退出后,是不会通知进程的,这个时候进程会成为孤儿进程,最终被init进程收养。我们先来看一下这种情况。...内容很多,主要意思为:设置一个信号,当父进程退出的时候,进程将会收到该信号。 那么根据这个,我们完全可以在父进程退出,也给进程一个退出的信号。...可以看到,由于加入了 prctl(PR_SET_PDEATHSIG,SIGKILL); 在父进程退出进程将会收到SIGKILL信号,而进程收到该信号的默认动作则是退出。...总结 有些情况下,我们常常需要父子进程共存亡,进程退出,父进程可以通过wait捕捉进程的退出状态,但是父进程退出进程却难以得知。

    12K21

    subprocess:Python中创建进程

    前言 subprocess库提供了一个API创建进程并与之通信。这对于运行生产或消费文本的程序尤其有好处,因为这个API支持通过新进行的标准输入和输出通道来回传数据。...print(completed.returncode) 这里我们运行了一个windows系统常用的whoami命令,返回当前用户的名称,输出如下: 这里,我们使用了subprocess.run调用了进程运行...returncode为进程的退出状态码。通常情况下,退出状态码为0则表示进程成功运行了;一个负值-N表示这个子进程被信号N终止了。...与进程的单项通信 要运行一个进程读取它的所有输出,可以设置stdout为PIPE并调用communicate()函数。...,一般使用input()进行用户输入数据。

    49870

    Python程序中创建进程对环境变量的要求

    首先,来看下面一段代码,在主进程中重新为os.environ赋值,但在进程中并不会起作用,进程中使用的仍是系统的全部环境变量。 ? 运行结果: ?...在Python中,为变量重新赋值实际上是修改了变量的引用,这适用于任意类型的变量。对于列表、字典、集合以及类似的可变类型对象,可以通过一定形式改变其中元素的引用而不改变整个对象的引用。...在主进程中清空了所有环境变量,然后创建进程失败并引发了异常。...以Windows操作系统为例,创建进程时会调用API函数CreateProcessA,该函数要求环境变量至少要包含SYSTEMROOT,否则调用另一个函数CryptAcquireContext时会失败

    2.3K30

    如何在父进程读取(外部)进程的标准输出和标准错误输出结果

    依稀记得去年年中,有个同事也问过我如何获取被调用进程的输出结果,当时还研究了一番,只是没有做整理。今天花点时间,将该方法整理成文。...它是我们启动进程,控制进程启动方式的参数。...我们之后将hWrite交给我们创建的进程,让它去将信息写入管道。而我们父进程,则使用hRead去读取进程写入管道的内容。...这就解释了我们之前为什么在创建管道要将句柄可继承性设置为TRUE的原因。         一般来说,我们要代理的程序已经输入好信息了。我们要关闭写管道 if ( NULL !...delete [] pBuffer; wprintf(L"%s", cstrBuffer); } return 0; }         这样,我们就可以拿到进程输出结果并加以分析

    3.8K10

    Python进程加快图片读取速度、多进程下图片的有序读取(mp.Queue)

    Python进程加快图片读取速度(mp.Queue) 多进程,加快图片读取,多进程下图片的有序读取Python,multiprocessing,multiprocessing.Queue,opencv-python...文章结构 快速使用,多进程读取图片(简化版) 影响读取速度的瓶颈(CPU 与磁盘) 多进程读取图片(完整版):有序读取、图片检查 1.快速使用,多进程读取图片(简化版) 黑色加粗的地方,是文件夹路径...这里用到了 python3 自带的 multiprocessing.Queue 完成多进程的实现,如果你想先对 multiprocessing 有一定的了解,可以先看我的另一篇文章(还没写,有人催我就写...(CPU 与磁盘) 开启多个进程从磁盘读取文件,并由 CPU 解析图片格式,将图片转化为 numpy 的 ndarray 保存在内存里面 当备用内存中找不到我们要读取的图片时,进程开始从磁盘中读取,这个时候磁盘成为限制读取的瓶颈...,在我的另外一篇文章( 使用卷积网络移除卫星图片中的云层 )中,我也需要使用多进程加快磁盘图片文件的读取,因为我顺便把多进程读取图片的代码发到网络上,方便大家交流。

    50570

    python进程进程进程间共享和不共享全局变量实例

    Python进程默认不能共享全局变量 主进程进程是并发执行的,进程之间默认是不能共享全局变量的(进程不能改变主进程中全局变量的值)。...import multiprocessing import time import os datalist=['+++'] #全局变量,主进程进程是并发执行的,他们不能共享全局变量(进程不能改变主进程中全局变量的值...",os.getpid(),datalist) Python 进程之间共享数据(全局变量) 进程之间共享数据(数值型): import multiprocessing def func(num):...d表示数值,主进程进程共享这个value。...#进程改变数组,主进程跟着改变 if __name__=="__main__": num=multiprocessing.Array("i",[1,2,3,4,5]) #主进程进程共享这个数组

    4.7K20

    Python进程subpocess原理及用法解析

    python进程嘛,就是利用python打开一个进程(当然像是一句废话),但是可能和我们理解的不太一样。 一:如何理解?...我们可能的理解:多开一个进程运行某个python函数(如果只想实现这个功能,请使用multiprocessing包) 正确的理解:python通过shell/cmd 打开一个新的程序进程,而不限于python...函数,比如我们可以开一个“ls”指令的进程列出当前文件夹下的文件,这个“ls”指令明显是一个shell通用函数,而不是python 函数: # 打开进程运行“ls”。...当我们想单纯地利用subprocess打开一个进程运行python函数的时候,我们甚至要迂回地去做: 比方说这样: (1)新建一个需要运行的函数脚本 test_print.py import sys def...", "test_print.py", "a1", "b2", "c3"]) pp = subprocess.run(["python", "test_print.py", "d4", "e5", "f6

    93310

    Python标准库06 进程 (subprocess包)

    Python中,我们通过标准库中的subprocess包来fork一个进程,并运行一个外部的程序(fork,exec见Linux进程基础)。...使用subprocess包中的函数创建进程的时候,要注意: 1) 在创建进程之后,父进程是否暂停,并等待进程运行。 2) 函数返回什么 3) 当returncode不为0,父进程如何处理。...这个时候,我们使用一整个字符串,而不是一个表来运行进程Python将先运行一个shell,再用这个shell来解释这整个字符串。...child1的stdout将文本输出到缓存区,随后child2的stdin从该PIPE中将文本读取走。...child2的输出文本也被存放在PIPE中,直到communicate()方法从PIPE中读取出PIPE中的文本。

    2.8K60

    Python基础16-正则和进程模块

    (在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。...解释器读取a\\c,会发生转义,然后交给re去执行,所以抛出异常 print(re.findall(r'a\\c','a\c')) #r代表告诉解释器使用rawstring,即原生字符串,把我们正则内的所有符号都当普通字符处理...\|",src)) subprocess模块 ---- subprocess模块介绍 sub process 进程 什么是进程 正在进行中的程序...subprocess的好处是可以获取指令的执行结果 subprocess执行指令 可以在进程中 这样避免造成主进程卡死 注意 管道的read方法和文件的read有相同的问题...a读取tasklist的内容 将数据交给另一个进程b 进程b将数据写到文件中 res1 = subprocess.Popen("tasklist",stdout=subprocess.PIPE,shell

    1.2K50

    Python进程编程__name__属性的作用

    问题描述: Python程序中,由于GIL(Global Interpreter Lock,全局解释器锁)的原因,采用多线程编程并不能大幅度提高任务吞吐量。...如果要充分利用硬件资源和大幅度提高任务吞吐量,需要使用多进程编程技术。 进程是正在执行中的应用程序,是操作系统进行资源分配的最小单位。...Python标准库multiprocessing用来实现进程的创建与管理以及进程间的同步与数据交换,是支持并行处理的重要模块,其中创建、启动进程以及进程间同步的用法与threading中的线程类似。...众所周知,Python程序在运行时有个特殊属性__name__,当在Python开发环境中或命令提示符中直接执行Python程序时,特殊属性__name__的值为'__main__'。...为什么多进程编程程序中总是要加上这样一句呢?下面的演示代码解释了这个问题。 演示代码: ? 运行结果: ?

    70010

    python 在threading中如何处理主进程线程的关系

    之前用python的多线程,总是处理不好进程和线程之间的关系。后来发现了join和setDaemon函数,才终于弄明白。下面总结一下。...1.使用join函数后,主进程会在调用join的地方等待线程结束,然后才接着往下执行。...这里设置主进程为守护进程,当主进程结束的时候,线程被中止 运行结果如下: #python testsetDaemon.py This is the end of main thread. 3...、如果没有使用join和setDaemon函数,则主进程在创建线程后,直接运行后面的代码,主程序一直挂起,直到线程结束才能结束。...:2.9418249130249023秒 以上这篇python 在threading中如何处理主进程线程的关系就是小编分享给大家的全部内容了,希望能给大家一个参考。

    2.8K10

    如何在Bash中等待多个子进程完成,并且当其中任何一个进程以非零退出状态结束,使主进程也返回一个非零的退出码?

    问题 如何在 Bash 脚本中等待该脚本启动的多个子进程完成,并且当这其中任意一个进程以非零退出码结束,让该脚本也返回一个非零的退出码? 简单的脚本: #!.../bin/bash for i in `seq 0 9`; do calculations $i & done wait 上述脚本将会等待所有 10 个被创建的进程结束,但它总会给出退出状态 0...我应该如何修改这个脚本,使其能检测到被创建进程的退出状态,并且当任何进程以非零代码结束,让脚本返回退出码 1?.../usr/bin/env bash # 这是一个特殊的 sleep 函数,它将睡眠的秒数作为"错误代码" # 或"返回代码"返回,以便我们可以清楚地看到,实际上 # 我们在每个进程完成确实获取了它的返回代码...# 存储上一个进程启动的 pid echo " pid = ${pids[$i]}" done for pid in $pids; do wait $pid rc=$?

    8800

    Java魔法堂:调用外部程序

    (采用xcopy命令复制大量文件将会出现该问题) 解决办法就是当前的Java程序不断读取缓冲池的内容,从而为腾出缓冲池的空间。...若进程尚未完成则会等待进程完成后才恢复当前线程。...// 问题:若进程无法正常关闭,则会导致Java线程一直挂起; // 返回值为进程的退出码 int waitFor()。...// 如果超时前进程结束,那么返回`true` ,否则返回`false` boolean waitFor(long timeout, TimeUnit unit) // 强行终止进程,但调用后进程不会马上被终止...() // 获取进程的标准输入流,如果子进程以`ProcessBuilder`创建,且通过`ProcessBuilder.redirectInput`设置重定向,那么该方法返回`null` OutputStream

    1.6K10
    领券