subprocess.wait() 不等待 Popen 进程完成(使用线程时)?

2024-03-17

我在使用时遇到一些问题subprocess.Popen()使用线程从我的 python 脚本生成同一应用程序的多个实例,使它们同时运行。在每个线程中,我使用以下命令运行应用程序popen()调用,然后我通过调用等待它完成wait()。问题似乎在于wait()-call 实际上并不等待进程完成。我进行了实验,仅使用一个线程,并在进程开始和结束时打印出文本消息。所以线程函数看起来像这样:

def worker():
    while True:
        job = q.get() # q is a global Queue of jobs
        print('Starting process %d' % job['id'])
        proc = subprocess.Popen(job['cmd'], shell=True)
        proc.wait()
        print('Finished process %d' % job['id'])
        job.task_done()

但即使当我只使用一个线程时,它也会在出现任何“已完成进程...”消息之前打印出几条“正在启动进程...”消息。是否存在以下情况:wait()其实不等吗?我有几个不同的外部应用程序(C++ 控制台应用程序),这些应用程序又将同时运行多个实例,对于其中一些实例,我的代码可以工作,但对于其他应用程序,则不能。外部应用程序是否存在某些问题,会以某种方式影响对wait()? 创建线程的代码如下所示:

for i in range(1):
    t = Thread(target=worker)
    t.daemon = True
    t.start()
q.join() # Wait for the queue to empty

Update 1: 我还应该补充一点,对于某些外部应用程序,我有时会得到返回代码(proc.returncode)为-1073471801。例如,其中一个外部应用程序将在前两次给出该返回代码Popen被调用,但不是最后两个(当我有四份工作时)。

Update 2: 为了澄清事情,现在我有四个作业在队列中,这是四个不同的测试用例。当我运行代码时,对于其中一个外部应用程序,前两个应用程序Popen-调用生成返回码-1073471801。但是如果我打印确切的命令Popen调用,并在命令窗口中运行它,它执行没有任何问题。

Solved!我设法解决了我遇到的问题。我认为问题是我缺乏线程编程经验。我错过了这样一个事实:当我创建第一个工作线程时,它们将继续存在,直到 python 脚本退出。每次我将新项目放入队列时,我都会错误地创建更多工作线程(我为每个要运行的外部程序批量执行此操作)。因此,当我到达第四个外部应用程序时,我有四个线程同时运行,尽管我以为我只有一个线程。


你也可以使用check_call() https://docs.python.org/3/library/subprocess.html#subprocess.check_call而不是波彭。check_call() https://docs.python.org/3/library/subprocess.html#subprocess.check_call等待命令完成,即使shell=True然后返回作业的退出代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

subprocess.wait() 不等待 Popen 进程完成(使用线程时)? 的相关文章

  • 从所有数据帧列中删除子字符串

    我有一个单词列表 大约 1000 个单词 我称之为负面单词 CAST ARTICLES SANITARY JAN CLAUSES SPECIAL ENDORSEMENT 我很快就会用这个单词列表制作一个数据框 我还有一个数据框 看起来像 F
  • docker 容器中的“(pygame parachute)分段错误”

    尝试在 docker 容器中使用 pygame 时出现以下错误 我想从容器中获取显示 Fatal Python error pygame parachute Segmentation Fault 重现 Docker已安装 docker ru
  • pyCUDA无法打印结果

    最近 我使用 pip 为我的 python3 4 3 安装 pyCUDA 但我在测试示例代码时发现 https documen tician de pycuda tutorial html getting started https doc
  • Python 不考虑 distutils.cfg

    我已经尝试了给出的所有内容 并且所有教程都指向相同的方向 即使用 mingw 作为 python 而不是 Visual C 中的编译器 我确实有 Visual C 和 mingw 当我想使用 pip 安装时 问题开始出现 它总是给Unabl
  • Python:json_normalize pandas 系列给出 TypeError

    我在 pandas 系列中有数万行像这样的 json 片段df json IDs lotId 1 Id 123456 date 2009 04 17 bidsCount 2 IDs lotId 2 Id 123456 date 2009 0
  • 使用 Boto3 超时的 AWS Lambda 函数

    我已经解决了我自己的问题 但无论如何我都会发布它 希望能节省其他人几个小时 我在 AWS 上有一个无服务器项目 使用 Python 将记录插入到 kinesis 队列中 但是 当我使用 boto3 client kinesis 或 put
  • 将整数系列转换为交替(双元)二进制系列

    我不知道如何最好地表达这个问题 因为在这里谷歌搜索和搜索总是让我找到更复杂的东西 我很确定这是基本的东西 但对于我的生活来说 我找不到一个好的方法来做到这一点下列 给定一个整数序列 比如说 for x in range 0 36 我想将这些
  • Python3将模块从文件夹导入到另一个文件夹

    我的结构字典是 mainFolder folder1 init py file1 py file2 py folder2 init py file3 py file4 py setup py init py 我需要将 file4 py 从f
  • 使用 scikit 时 scipy.sparse 矩阵的缩放问题

    在使用 scikit learn 解决机器学习问题时 我需要在使用 SVM 进行训练之前对 scipy sparse 矩阵进行缩放 但在文档 http scikit learn org stable modules preprocessin
  • 在 Haskell 中创建 100 万个线程需要多长时间?

    据我了解 Haskell 有绿色线程 但它们的重量有多轻 是否可以创建100万个线程 或者 100 000 个线程需要多长时间 from here http www reddit com r programming comments a4n
  • Python在没有pandas的情况下解码excel表

    我正在尝试在 python 中读取 excel 文件而不使用pandas or xlrd 我一直在尝试将结果转换为bytes to utf 8没有任何成功 xls 文件中的数据 colA colB colC spc 1D0 20190705
  • Java:使用 Java.util.concurrent 线程访问读取线程串行端口

    我正在尝试编写一个 Java 串行设备驱动程序并想使用 对我来说是新的 java util concurrent包裹 我有一种发送数据包然后等待 ACK 的方法 我打算有炭 接收在不同的线程中运行 如果接收线程收到 ACK 它应该使用发送数
  • Python:导入模块一次然后与多个文件共享

    我有如下文件 file1 py file2 py file3 py 假设这三个都使用 lib7 py lib8 py lib9 py 目前 这三个文件中的每一个都有以下行 import lib7 import lib8 import lib
  • Python脚本从字母和两个字母组合生成单词

    我正在编写一个简短的脚本 它允许我使用我设置的参数生成所有可能的字母组合 例如 b a 参数 单词 5 个字母 第三 第五个字母 b a 第一个字母 ph sd nn mm 或 gh 第二 第四个字母 任意元音 aeiouy 和 rc 换句
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 如何创建增量加载网页

    我正在编写一个处理大量数据的页面 它会永远持续到我的结果页面加载 几乎无限 因为返回的数据太大了 因此 我需要实现一个增量加载页面 例如 url 中的页面 http docs python org http docs python org
  • 将 Django 中的所有视图限制为经过身份验证的用户

    我是 Django 新手 我正在开发一个项目 该项目有一个登录页面作为其索引和一个注册页面 其余页面都必须仅限于登录用户 如果未经身份验证的用户尝试访问这些页面 则必须将他 她重定向到登录页面 我看到 login required装饰器会将
  • 我们可以有虚假中断吗?

    我正在创建一个任务轮询器 每分钟都会查找任务 它看起来像这样 public class Poller private final ExecutorService e Executors newSingleThreadExecutor pub
  • 用 pandas DataFrame 替换 mysql 数据库表中的行

    Python 版本 2 7 6 熊猫版本 0 17 1 MySQLdb 版本 1 2 5 在我的数据库中 PRODUCT 我有一张桌子 XML FEED 表 XML FEED 很大 数百万条记录 我有一个 pandas DataFrame
  • SQLAlchemy 与 count、group_by 和 order_by 使用 ORM

    我有几个函数需要使用 count group by 和 order by 进行一对多连接 我使用 sqlalchemy select 函数生成一个查询 该查询将返回一组 id 然后我对其进行迭代以对各个记录执行 ORM 选择 我想知道是否有

随机推荐

  • XAMPP Apache 和 MySQL 服务在首次安装后未启动或停止

    您好 我想开始学习 PHP 和 MySql 并完善我对 Javascript 的了解 目前我只使用 jQuery 并且只知道该语言的核心语法 我选择阅读学习 PHP MySQL 和 JavaScript https rads stackov
  • 有人发布过任何 C# 4 编码标准/指南/风格指南吗?

    我了解 C 2 和 C 3 的许多编码标准和指南 但正在寻找一些针对 C 4 编写的标准和指南 我正在发布 C 4 0 的新编码指南here http csharpguidelines codeplex com releases view
  • ng-repeat 选择列表中的初始值

    请帮助 ng repeat 我使用 ng repeat 创建了一个值列表 如何指定我要首先显示的列表中间的值 我想在列表中首先显示 地球 我的代码 html li class list item poster title li 控制器 us
  • 加载器框架和活动生命周期

    我很喜欢loaders以及他们的好处 但我遇到了一个我不知道如何解决的问题 在我的活动中 我使用 AsyncTaskLoader 从数据库加载一些数据并向onLoadFinished Loader
  • 相当于 Surefire + JUnit 的 @DirtiesContext(...) 吗?

    我正在使用maven surefire plugin with junit4 1 4 我有一个单元测试 它依赖于内部使用的第三方类static 代码块来初始化一些变量 对于一项测试 我需要更改这些变量之一 但仅限于某些测试 我希望在测试之间
  • 如何将自定义对象列表绑定到 ComboBox?

    如何将自定义对象列表绑定到组合框 这就是我目前所拥有的 this classCmbo DataSource viewModel Coarses this classCmbo DisplayMember Name this classCmbo
  • 疯狂的 JavaFX 帧速率 - 有什么想法吗?

    JavaFX 具有疯狂的帧速率 我今天演示了不同的 JavaFX 动画选项 然而 在我用于演示的机器上 AnimationTimer 的行为非常奇怪 据我了解 JavaFX 的目标应该是 60FPS 左右的速率 并且在每帧之前调用动画计时器
  • 如何在 ERB 中编写像 标签这样的纯 HTML?

    我想更换 gt 但我不明白为什么这比
  • 用于 C++ 的类似codingbat的网站[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 伙计们 我需要找到一个好的网站 比如编码蝙蝠 http codingbat com 再次学习 C 我在学校学过它 但后来我从未认真使用过它
  • 如何从 fullcalendar JS 视图中删除所有日期?

    我正在尝试构建一个在 fullcalendar 中创建事件的应用程序 我根本不允许用户在客户端创建 allDay 事件 但他们仍然可以在视图中看到它 有什么方法可以从视图中完全删除 allDays 吗 function initCalend
  • 在 TextField IText 中调整文本

    抱歉 如果存在像我这样的类似帖子 但我是这个论坛的新手 我还没有找到它 我在动态调整 TextField 大小取决于文本大小时遇到 问题 我填写现有的 PDF 填写 AcroForm 中的字段 form setField 字段 值 等 一切
  • 检查字符串是否为日期 Postgresql

    有没有什么功能PostgreSQL返回Boolean给定的字符串是否是日期 就像ISDATE 在 MSSQL 中 ISDATE January 1 2014 您可以创建一个函数 create or replace function is d
  • 在 OS X El Capitan 上使用 libssl 编译 C 程序?

    我有一个使用 libssl 的简单 C 程序 在 Linux 上 我安装了 openssl dev 包并使用以下行编译了程序 gcc test libssl c o test libssl lcrypto lssl 现在我想在我的 Mac
  • 如何将数组的元素作为单独的参数传递给函数?

    我有一个像这样的函数 但有更多参数 function do something n1 n2 n3 return n1 n2 n3 然后我有一个包含 3 个项目的数组 它们是该函数的参数 my array 10 123 14 例如 do so
  • SQL Server JDBC 异常

    当使用 ANT 构建我的 Java 应用程序时 我不断收到此错误 我已多次尝试使用 SQLJDBC JAR 和 SQLJDBC4 JAR 但不断收到此错误消息 我完全困惑为什么即使升级到 sqljdbc4 jar 后也会收到此错误 java
  • Nginx 未运行且没有错误消息

    我正在尝试启动我的 nginx 服务器 当我输入 gt etc init d nginx start 时 出现一条消息 正在启动 nginx 然后什么也没有发生 没有错误消息 当我检查 nginx 的状态时 我发现它没有运行 这是我的 et
  • 程序在 execvp( command.argv[0], command.argv) 之后停止

    我正在编写一个小型 shell 程序 它接受命令并执行它 如果用户输入无效命令 if 语句将返回 1 如果命令正确 则执行该命令 但是一旦执行该命令 程序就会结束 我做错了什么 不执行后面的代码行 我已经使用 ls 和 cat 命令测试了
  • 使用公式内现有单元格的值

    我正在使用 Excel 2010 中的 相机 功能 我的目标是有一个单元格 其中有一个我可以手动输入的日期 并且在其下方 公式将获得更新的值 该值代表另一个 Excel 文件中的工作表名称 并向我显示更新的屏幕截图 例如 细胞A1 has
  • 如何隐藏 VS Code 中的状态栏?

    如何隐藏 Visual Studio Code 中的状态栏 应该可以隐藏状态栏 有什么办法可以隐藏它吗 在 查看 菜单中 我找不到隐藏它的选项 View gt Appearance gt Show Status Bar Screenshot
  • subprocess.wait() 不等待 Popen 进程完成(使用线程时)?

    我在使用时遇到一些问题subprocess Popen 使用线程从我的 python 脚本生成同一应用程序的多个实例 使它们同时运行 在每个线程中 我使用以下命令运行应用程序popen 调用 然后我通过调用等待它完成wait 问题似乎在于w