满足条件时终止多处理进程

2023-12-09

我试图运行的想法是这样的:

RUN 3 进程进行计算 一旦 3 个进程之一完成任务 立即杀死其他人并继续主要任务,我不能让它再运行下去

我尝试过的事情是: 将全局变量放入 multiprocessing.manager,但这仍然可以让进程完成循环。 引发异常

操作系统:Windows 蟒蛇:2.7

def f(name):
    Doing = True
    try:
        while Doing:
            print 'DOING',name
            somecodethatmarksDoingAsFalse()
    except Exception as error:
        print 'bye'
        print error
        Doing = False
        return True




if __name__ == '__main__':
    p = multiprocessing.Process(target=f, args=('bob',))
    p2 = multiprocessing.Process(target=f, args=('tom',))
    p.start()
    p2.start()

    p.join()
    p2.join()


    raise Exception('I know Python!')
    sys.exit()

我希望当我将操作标记为 false 时能够终止所有进程,在其中一个进程上完成计算时引发异常或以任何方式

EDIT:它不是重复的,因为它仍然完成执行代码,例如Requests模块仍然发送数据


如果你需要即时杀死,你可以使用multiprocessing.Event通知父进程满足条件并让它立即杀死工作进程。对于如此小的同步需求来说,管理器进程太重量级了。

import os
from datetime import datetime
from multiprocessing import Process, Event


def worker(range_, target, found_event):
    print('{} | pid: {} started'.format(datetime.now(), os.getpid()))
    for x in range_:
        if x == target:
            print('{} | pid: {} found target'.format(
                datetime.now(), os.getpid())
            )
            found_event.set()


if __name__ == "__main__":

    N_WORKERS = 4

    step = int(200e6)
    ranges = [range(x, x + step) # change `range` to `xrange` for Python 2
              for x in range(0, N_WORKERS * step, step)]
    # range(0, 200000000), ..., range(800000000, 1000000000)]
    target = int(150e6)  # <-- worker finding this value triggers massacre
    found_event = Event()

    pool = [Process(target=worker, args=(range_, target, found_event))
            for range_ in ranges]

    for p in pool:
        p.start()

    found_event.wait()  # <- blocks until condition met
    print('{} | terminating processes'.format(datetime.now()))
    for p in pool:
        p.terminate()
    for p in pool:
        p.join()
    print('{} | all processes joined'.format(datetime.now()))

示例输出:

2019-01-17 01:55:33.781884 | pid: 28376 started
2019-01-17 01:55:33.782333 | pid: 28377 started
2019-01-17 01:55:33.782851 | pid: 28378 started
2019-01-17 01:55:33.783484 | pid: 28379 started
2019-01-17 01:55:54.715425 | pid: 28376 found target
2019-01-17 01:55:54.715613 | terminating processes
2019-01-17 01:55:54.716326 | all processes joined

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

满足条件时终止多处理进程 的相关文章

  • python 可以检测它运行在哪个操作系统下吗?

    python 可以检测操作系统 然后为文件系统构建 if else 语句吗 我需要将 Fn 字符串中的 C CobaltRCX 替换为 FileSys 字符串 import os path csv from time import strf
  • 替换字符串列表中的 \x00 的最佳方法?

    我有一个来自已解析 PE 文件的值列表 其中包括 x00每个部分末尾的空字节 我希望能够删除 x00字符串中的字节而不删除所有字节 x 文件中的 s 我试过做 replace and re sub 但并没有取得太大成功 使用Python 2
  • 使用 Django 的 post_save() 信号

    我有两张桌子 class Advertisement models Model created at models DateTimeField auto now add True author email models EmailField
  • Dask DataFrame 的逐行处理

    我需要处理一个大文件并更改一些值 我想做这样的事情 for index row in dataFrame iterrows foo doSomeStuffWith row lol doOtherStuffWith row dataFrame
  • 获取单个方程的脚本

    在文本文件中输入 a 2 8 b 3 9 c 4 8 d 5 9 e a b f c d g 0 6 h 1 7 i e g j f h output i j 期望的输出 输出 2 8 3 9 0 6 4 8 5 9 1 7 如果输入文件名
  • 类属性在功能上依赖于其他类属性

    我正在尝试使用静态类属性来定义另一个静态类属性 我认为可以通过以下代码来实现 f lambda s s 1 class A foo foo bar f A foo 然而 这导致NameError name A is not defined
  • NLTK、搭配问题:需要解包的值太多(预期为 2)

    我尝试使用 NLTK 检索搭配 但出现错误 我使用内置的古腾堡语料库 I wrote alice nltk corpus gutenberg fileids 7 al nltk corpus gutenberg words alice al
  • Sorted(key=lambda: ...) 背后的语法[重复]

    这个问题在这里已经有答案了 我不太明白背后的语法sorted 争论 key lambda variable variable 0 Isn t lambda随意的 为什么是variable在看起来像的内容中陈述了两次dict 我认为这里的所有
  • 使用正则表达式解析 Snort 警报文件

    我正在尝试使用 Python 中的正则表达式从 snort 警报文件中解析出源 目标 IP 和端口 和时间戳 示例如下 03 09 14 10 43 323717 1 2008015 9 ET MALWARE User Agent Win9
  • 在 python-docx 中搜索和替换

    我有一个包含以下字符串的文档 模板 你好 我的名字是鲍勃 鲍勃是一个很好的名字 我想使用 python docx 打开此文档并使用 查找和替换 方法 如果存在 来更改每个字符串 Bob gt Mark 最后 我想生成一个新文档 其中包含字符
  • 如何为多组精灵创建随机位置?

    我尝试使用 blit 和 draw 方法进行 for 循环 并为 PlayerSprite 和 Treegroup 使用不同的变量 for PlayerSprite in Treegroup surface blit PlayerSprit
  • Python unicode 字符代码?

    有没有办法将 Unicode 字符 插入 Python 3 中的字符串 例如 gt gt gt import unicode gt gt gt string This is a full block s unicode charcode U
  • 我可以使用 dask 创建 multivariate_normal 矩阵吗?

    有点相关这个帖子 https stackoverflow com questions 52337612 random multivariate normal on a dask array 我正在尝试复制multivariate norma
  • urllib2.urlopen() 是否实际获取页面?

    当我使用 urllib2 urlopen 时 我在考虑它只是为了读取标题还是实际上带回整个网页 IE 是否真的通过 urlopen 调用或 read 调用获取 HTML 页面 handle urllib2 urlopen url html
  • 负整数的Python表示

    gt gt gt x 4 gt gt gt print b format x x 4 100 gt gt gt mask 0xFFFFFFFF gt gt gt print b format x mask x mask 4294967292
  • ValueError:无法插入 ID,已存在

    我有这个数据 ID TIME 1 2 1 4 1 2 2 3 我想按以下方式对数据进行分组ID并计算每组的平均时间和规模 ID MEAN TIME COUNT 1 2 67 3 2 3 00 1 如果我运行此代码 则会收到错误 ValueE
  • WindowsError:[错误 5] 访问被拒绝

    我一直在尝试终止一个进程 但我的所有选项都给出了 Windows 访问被拒绝错误 我通过以下方式打开进程 一个python脚本 test subprocess Popen sys executable testsc py 我想杀死那个进程
  • 如何在单独的文件中使用 FastAPI Depends 作为端点/路由?

    我在单独的文件中定义了一个 Websocket 端点 例如 from starlette endpoints import WebSocketEndpoint from connection service import Connectio
  • 将 Scikit-Learn OneHotEncoder 与 Pandas DataFrame 结合使用

    我正在尝试使用 Scikit Learn 的 OneHotEncoder 将 Pandas DataFrame 中包含字符串的列替换为 one hot 编码的等效项 我的下面的代码不起作用 from sklearn preprocessin
  • 如何识别图形线条

    我有以下格式的路径的 x y 数据 示例仅用于说明 seq p1 p2 0 20 2 3 1 20 2 4 2 20 4 4 3 22 5 5 4 22 5 6 5 23 6 2 6 23 6 3 7 23 6 4 每条路径都有多个点 它们

随机推荐

  • 正则表达式匹配 C# 中的所有大写和下划线

    我需要从字符串中查找仅包含大写字母和下划线的所有单词 string str ABCD EFG LMNO hello world PQR ST UVW US Apple PQR ZYZ PQR LMN ZYZ string pattern A
  • 10.6中如何在Interface Builder中创建NSImageCell的NSMatrix

    如何在 Interface Builder 3 2 1 即为 Snow Leopard 制作的 中创建 NSImageCell 单元格 通常位于 NSImageView 中 的矩阵 NSMatrix 对象 在 过去 您可以拖动 NSImag
  • Spring @Transactional 属性是否适用于私有方法?

    如果我有一个 事务性Spring bean中的私有方法上的注释 注释有什么作用吗 If the Transactional注释位于公共方法上 它可以工作并打开事务 public class Bean public void doStuff
  • 如何绘制堆叠柱类型的 Google 图表

    我有这个表结构 Name Grade Count X VeryGood 10 X Excellent 2 X Failed 0 Y VeryGood 7 Y Excellent 1 Y Failed 2 我想在堆积谷歌图表中显示这些数据 类
  • 使用宏将数据文件导入新选项卡时,如何提示用户选择文件?

    我有一个宏 当前正在创建一个新工作表 并将另一个 Excel 文件导入到这个新工作表中 然后 该工作表中的数据将被拉入工作簿的其他区域 正在导入的文件将始终具有不同的文件名 如何调整以下代码以提示用户选择文件 目录不会改变 子导入需求 工作
  • 使用 pygame 进行 blit opencv 相机捕获会抛出 TypeError:参数 1 必须是 pygame.Surface,而不是 cv2.VideoCapture

    我是 pygame 的新手 以前从未使用过它 想知道如何使用 pygame 和 opencv 将网络摄像头传输或显示到表面 但我不断收到消息 Traceback most recent call last File
  • 在 Android 中裁剪图像并调整其大小

    我正在从磁盘读取图像并将其显示在行中ListView 图像文件比需要在内部显示的文件大ImageView的行 由于我需要缓存bitmaps为了更快的访问 我希望它们只和 RAM 一样大ImageView小号 85x85 倾角 现在我正在阅读
  • 如何获取模型观察者中的current_user?

    给定以下模型 Room id title RoomMembers id room id RoomFeed also an observer 当房间标题更新时 我想创建一个 RoomFeed 项目 显示进行更新的用户是谁 room updat
  • 在 Youtube api 中创建播放列表

    我看过 Youtube 的文档 但我似乎不明白如何为用户专门为 ios 创建播放列表 我知道用户需要使用 OAuth 2 登录来授予应用程序访问 权限来创建播放列表 文档链接 https developers google com yout
  • https 是否保留在相对表单操作 URL 上?

    考虑一个带有通过 https 访问的表单的页面 如果表单操作具有表单页面的相对 URL 是否保留 https 协议 例如 您访问 https example com cart html 其中包含表单标签
  • 如何在不使用 printf 的情况下打印指针地址

    我正在做一个练习 需要打印指针的内存 地址 这样做很容易printf p 但我不被允许使用它 你知道我如何在不使用的情况下获得地址吗printf 我唯一可以使用的功能是 写入 这是我的练习声明 编写一个函数 它需要 const void a
  • 在固定功能管道绘图中使用 FBO 将 OpenGL 场景渲染为纹理

    问题 我从事开源游戏 torcs 的工作 http torcs sourceforge net 游戏的图形管线仍然使用OpenGL 1 3的固定功能管线 FFP 我尝试将游戏场景渲染到 FBO 帧缓冲区对象 中的纹理 以便对渲染的纹理进行一
  • Android 上 SQLite 数据库的最大大小是多少?

    我有一个大小超过 2 6 GiB 的 SQLite 数据库 数据库包含地图 该数据库由 RMaps 应用程序使用 当以最大缩放比例将地图移动到某些部分时 应用程序突然关闭 但是 没有强制关闭消息 也没有报告按钮 所以 我有一个想法 它是由超
  • ArrayList<对象> JSON

    我正在尝试使用 Restlet 返回 JSON 数据 我可以使用以下命令返回单个项目的 JSON import org json JSONObject Site aSite new Site getSite JSONObject aSite
  • noSelectionOption 属性[重复]

    这个问题在这里已经有答案了 我是 JSF 新手 我遇到了noSelectionOptionJSF 2 0 中的属性 我不明白这个属性的目的 根据描述 它在需要选择并且用户选择时使用noSelectionOption导致验证错误 So if
  • 在字母表列表中查找缺失的字母

    我正在尝试解决以下问题 在传递的字母范围中找到丢失的字母并将其返回 如果所有字母都出现在该范围内 则返回 undefined 我将得到的字符串输入是 abce 应返回 d bcd 应该返回未定义 abcdefghjklmno 应该返回 i
  • 如何使用 MEF 获取 Visual Studio 扩展中的当前 ActiveDocument?

    我正在使用 MEF 开发 Visual Studio 2013 扩展 同时尝试读取 Active Document 内容类型和代码 目前 它仅在编辑器中打开文档 项目项时读取 一旦打开它们 每当我们在打开的文档选项卡之间切换时 它就不会再次
  • 根据路线删除@include

    我有一个菜单部分 其中包括一个输入搜索栏 但我不希望搜索栏在所有页面上都可见 而仅针对两个特定的 uri 有没有办法去除刀片中包含的内容 目前它看起来像这样 a href all a a href nes a a href snes a i
  • $在mongodb中过滤最多2个嵌套级别

    我有一个结构如下的数据库 Hospitais utis id 893910 nome UTI1 leitos id 128938120 paciente Oliver id 12803918239 paciente Priscilla
  • 满足条件时终止多处理进程

    我试图运行的想法是这样的 RUN 3 进程进行计算 一旦 3 个进程之一完成任务 立即杀死其他人并继续主要任务 我不能让它再运行下去 我尝试过的事情是 将全局变量放入 multiprocessing manager 但这仍然可以让进程完成循