如何杀死多进程中的所有池工作人员?

2023-11-26

我想停止单个工作人员的所有线程。

我有一个有 10 个工作线程的线程池:

def myfunction(i):
    print(i) 
    if (i == 20):
        sys.exit()

p = multiprocessing.Pool(10, init_worker) 

for i in range(100):
    p.apply_async(myfunction, (i,))

我的程序不会停止,其他进程会继续工作,直到所有 100 次迭代完成。我想从调用的线程内部完全停止池sys.exit()。目前的编写方式只会停止调用的工作程序sys.exit().


这没有按照你想要的方式工作,因为调用sys.exit()在工作进程中只会终止工作进程。它对父进程或其他工作人员没有影响,因为它们是单独的进程并引发SystemExit只影响当前进程。您需要向父进程发送回信号,告诉它应该关闭。针对您的用例执行此操作的一种方法是使用Event创建于multiprocessing.Manager server:

import multiprocessing

def myfunction(i, event):
    if not event.is_set():
        print i 
    if i == 20:
        event.set()

if __name__ == "__main__":
    p= multiprocessing.Pool(10) 
    m = multiprocessing.Manager()
    event = m.Event()
    for i in range(100):
        p.apply_async(myfunction , (i, event))
    p.close()

    event.wait()  # We'll block here until a worker calls `event.set()`
    p.terminate() # Terminate all processes in the Pool

Output:

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

正如卢克的回答中指出的,这里有一场竞赛:不能保证所有工人都会按顺序运行,因此有可能myfunction(20, ..)将在之前运行myfuntion(19, ..), 例如。也有可能其他工人之后20将在主进程对所设置的事件采取行动之前运行。我通过添加以下内容来减小比赛窗口的大小if not event.is_set():打印前致电i,但它仍然存在。

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

如何杀死多进程中的所有池工作人员? 的相关文章

随机推荐

  • 使用 jmx 和 java 5 以编程方式获取堆信息

    我知道使用 jconsole 附加到 java 进程来获取内存信息 具体来说 我正在以编程方式获取有关各种内存池的信息 以便我可以将其绑定到监视应用程序 Thanks 谢谢 mattk 我基本上就是这样做的 List memBeans Ma
  • Git 凭证助手导致“未找到存储库”错误?

    刚刚遇到了这个 Git 行为 它看起来像是凭证存储的错误 git pull Username for https github com Password for https email protected Already up to dat
  • 引导列重叠

    我对引导程序的网格布局有疑问 当我将屏幕大小调整为较小的布局时 我的列彼此重叠 我不确定问题是什么 这是正在发生的事情的图片 这是我的代码 div class container fluid div class row div class
  • 如何让用户使用 OpenCV 选择视频录制设备(网络摄像头)?

    所以我需要的是诸如捕获设备列表之类的东西 还有一些函数可以从用户那里获取他想要在哪个设备上进行流式传输 如何在 win32 C 控制台应用程序中使用 openCV 做这样的事情 正如 Martin 所说 OpenCV 不支持它 但你可以使用
  • Flexbox 自动边距不适用于 IE 中的 justify-content: center

    我有一个表格 其中的单元格可以包含多个图标以及文本 如果存在图标 它们会出现在文本的左侧 有几种可能的对齐情况 仅存在一个图标 图标应居中 仅存在文本 文本应左对齐 图标和文本均存在 图标和文本均应左对齐 我认为我可以通过用弹性盒将所有内容
  • Wildfly 无法加载 Oracle 驱动程序模块

    我正在尝试将 Oracle DB 数据源添加到 Wildfly 10 这是我所拥有的
  • 如何将 twilio 集成到 android 的 React Native 中?

    我正在使用 React Native 来构建需要 twilio 集成的 Android 移动应用程序 我使用了 npm 存储库中的示例代码 https github com rogchap react native twilio const
  • 使用 c++11 原子编写(旋转)线程屏障

    我试图熟悉 c 11 原子 所以我尝试为线程编写一个屏障类 在有人抱怨不使用现有类之前 这更多的是为了学习 自我改进 而不是出于任何实际需要 我的课程基本上如下所示 class barrier private std atomic
  • 如何在 Bash (linux) 或 Python 上仅过滤文件中的可打印字符?

    我想制作一个包含不可打印字符的文件 只包含可打印字符 我认为这个问题与ASCII 控制动作 但我找不到解决方案来做到这一点 也无法理解的含义 16D ASCII控制动作字符 在下面的文件中 输入文件的十六进制转储 00000000 4845
  • 如何检测iOS设备是否支持模糊效果?

    看来不同的iOS设备会渲染UINavigationBars with barStyle UIBarStyleBlack and translucent YES非常不同 考虑 iPhone 4 no tint iPhone 5 no tint
  • for循环不迭代

    在 MATLAB 中如下for loop for i 1 100 Do something such as disp i end 显然并不是真正通过迭代实现的 而是i变成矩阵 1 2 3 100 并且 循环 仅在此矩阵上执行一次i 您可以通
  • 使用 primefaces 扩展 (inputNumber)

    我是新来的primefaces词 我需要使用primefaces扩展名 inputNumber 在 XHTML 文件中我添加 taglib xmlns pe http primefaces org ui extensions 添加罐子时 p
  • 为什么 switch 语句不能应用于字符串?

    编译以下代码会出现错误消息 type illegal int main Compilation error switch expression of type illegal switch std string raj case sda 您
  • 为导航抽屉中的 Android 状态栏着色

    在我正在构建的这个应用程序中 我在我的活动中添加了一个导航抽屉片段 我使用的是 5 0 因此我能够设置primaryColor 和primaryColorDark 以获得正确的颜色 我决定尝试将我的导航抽屉设计得与 Google Now 5
  • Apache2中子文件夹目录浏览

    有一个文件夹位于http myserver 文件夹 我已禁用该文件夹的目录浏览 但我想启用子文件夹的目录浏览http myserver 文件夹 我怎样才能做到这一点 Thanks 这是一个可行的简单解决方案
  • 如何创建打开呼叫日志活动的 Intent?

    我想创建一个 Intent 打开显示当前设备通话记录的屏幕 我如何指定这样的意图 Barmaley 引导我找到了正确的路径 我将类型设置为 Calls ContentType Intent showCallLog new Intent sh
  • Terraform 启用 VM Insights

    有人设法通过 terraforms Insights 为虚拟机启用吗 我能够创建虚拟机 启用日志记录 但无法启用见解 我见过这个问题 但没有找到明确的答案 如何使用 terraform 启用 azure vm application Ins
  • 如何设置 NSExtensionActivationRule 谓词?

    Even 人们比我聪明得多找到语法NSExtensionActivationRule神秘 但即使是像我这样的傻瓜也应该能够复制 粘贴示例 不是吗 不幸的是我什至无法得到苹果的例子上班 当您点击共享表按钮 下面的堆栈跟踪 时 我的操作扩展的主
  • 如何在 JavaScript 更改后重绘 SVG(Internet Explorer 和 Edge)

    有谁知道如何在更改内容后强制 IE 和 Edge 显示 刷新嵌入的 SVG 请参阅下面的代码
  • 如何杀死多进程中的所有池工作人员?

    我想停止单个工作人员的所有线程 我有一个有 10 个工作线程的线程池 def myfunction i print i if i 20 sys exit p multiprocessing Pool 10 init worker for i