python: 多进程实例

news2024/11/27 4:23:49

1. 实例一

  • 主进程跟子进程的通过两个队列实现全双工通信;
  • 如有需要主进程会提示窗口输入信息传输给子进程;
  • 如果子进程收到主进程的消息,会弹窗提示收到的消息;
  • 子进程弹窗提示进程即将结束;
    在这里插入图片描述
  • 详细代码如下
# -*- coding: utf-8 -*-
# @Time    : 30/07/2024  09:58 AM
# @FileName: main.py
# @PythonVersion : (3, 7)
import multiprocessing
import random
import threading
import time

import FreeSimpleGUI as sg 


def worker(num, main_queue, sub_queue, lock):
    """子进程工作函数"""

    x = None
    time.sleep(1)  # 模拟长时间运行的任务
    msg = random.choice([True, False])
    if msg is True:
        with lock:
            message = f'进程 {num} 需要修改!'
            sub_queue.put(message)
            x = main_queue.get()
    if x:
        sg.popup(f"子进程{num}收到主进程发送过来的信息:{x}", keep_on_top=True)
    sg.popup(f"子进程{num}进程已结束!", keep_on_top=True)
    print(F"进程 {num} 执行完成!")


def thread_worker(main_queue, sub_queue, lock, num_processes):
    """子线程工作函数,启动进程池并管理管道"""

    with multiprocessing.Pool(processes=num_processes) as pool:
        # 启动子进程并将结果放入队列
        pool.starmap(worker, [(i, main_queue, sub_queue, lock) for i in range(num_processes)])
        pool.close()
        pool.join()

    sub_queue.put("任务都已执行完成!")


def main():
    layout = [
        [sg.Button('启动任务')],
        [sg.Text('', size=(30, 1), key='-OUTPUT-')]
    ]

    window = sg.Window('主窗口', layout)

    # 使用 Manager.Queue 来跟踪子进程的结果
    manager = multiprocessing.Manager()
    lock = manager.Lock()
    main_queue = manager.Queue()
    sub_queue = manager.Queue()

    while True:
        event, values = window.read(timeout=100)

        if event == sg.WIN_CLOSED:
            break

        if event == '启动任务':
            # 启动子线程
            threading.Thread(target=thread_worker, args=(main_queue, sub_queue, lock, 5), daemon=True).start()

        # 处理来自进程的消息
        while not sub_queue.empty():
            message = sub_queue.get()
            if not message == "任务都已执行完成!":
                window['-OUTPUT-'].update(message)
                main_queue.put(sg.popup_get_text(message + "主进程输入修改值"))
            else:
                window['-OUTPUT-'].update(message)

    window.close()


if __name__ == "__main__":
    main()


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1985517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑监控软件超全盘点!效率与隐私完美平衡!五款软件轻松实现企业级电脑屏幕管控!

企业对电脑监控软件的需求日益增长,旨在提升工作效率、保障数据安全并维护良好的工作环境。但,如何在提升管理效率的同时,尊重并保护员工的个人隐私,成为了企业选择监控软件时必须慎重考虑的问题。本文将为您盘点五款能够完美平衡…

从报名到领证:软考初级【网络管理员】报名考试全攻略

本文共计13189字,预计阅读30分钟。包括七个篇章:报名、准考证打印、备考、考试、成绩查询、证书领取及常见问题。 一、报名篇 报名条件要求: 1.凡遵守中华人民共和国宪法和各项法律,恪守职业道德,具有一定计算机技术…

电子时钟_仅需要浏览器

不需要任何安装框架&#xff0c;代码量少&#xff0c;只需要浏览器就可以。不用上网。 结果&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevi…

2024年武汉职称申报你不知道的那些事儿

2024年武汉职称申报你不知道的那些事儿 2024年武汉建筑类中级职称下半年好机会&#xff0c;手慢无&#xff01; 2024年武汉市下半年工程系列工程师职称中级职称申报评审 湖北省建筑类中级职称申报评审&#xff0c;湖北省各个地级市都是可以申报的&#xff0c;武汉市常规申报1次…

农业经济核心期刊合集推介,投稿从速!

搞农业经济研究的广大学者们&#xff0c;大家是不是都为了找合适的核心期刊发表论文而头疼过?下面给你推荐几本在农业经济领域很不错的核心期刊&#xff1a; 1.华东经济管理 AMI CSSCI 北大核心 月刊 期刊简介&#xff1a;本刊立足于中国经济发展的前沿——华东地区&#xff…

glibc回顾及数据库的主从复制(twenty-two day)

一、glibc安装&#xff08;回顾及补充&#xff09; mysql 清空/etc/目录下的my.cnf ls -l /etc/my.cnf rm -rf /etc/my.cnf yum -y remove mariadb find / -name "*mysql*" -exec rm -rf {} \; 安装mysql软件包 wget https://downloads.mysql.com/archives/get/p/23/…

某永PM2项目管理系统ExcelIn接口任意文件上传漏洞复现 [附POC]

文章目录 某永PM2项目管理系统ExcelIn接口任意文件上传漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现某永PM2项目管理系统ExcelIn接口任意文件上传漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相…

三大产品板块快速发展,零信任价值备受认可

经过多年发展&#xff0c;零信任商业模式走向成熟&#xff0c;市场逐步规模化&#xff0c;已经在各个行业进入落地阶段。 软件定义边界类产品纳管员工总数 2023年&#xff0c;软件定义边界产品&#xff08;SDP&#xff09;的应用潜力开始显现&#xff0c;市场进入高速发展期。…

vgg16网络搭建可运行代码

目录 1.我搭建的是这一个 2.方法一&#xff0c;用一个sequential配置 2 方法二&#xff0c;用cfg进行配置 1.我搭建的是这一个 2.方法一&#xff0c;用一个sequential配置 import torch from torch import nn from torchinfo import summaryclass Net(nn.Module):def __init…

el-table固定指定的行

这个整个表格数据都是后台返回的,并不是合并表格的那种,所以需要手动对表格进行样式处理! <el-table :data"tableData" border height"calc(400px - 0.52rem)" max-height"calc(400px - 0.52rem)" :row-class-name"TableRowClassNa…

如何降低光伏项目的初始投资成本?

高昂的初始投资成本一直是制约光伏项目发展的主要因素之一。本文将从多个方面探讨如何有效降低光伏项目的初始投资成本。 一、优化系统设计 1.合理规划组件布局 光伏项目的系统设计是降低成本的关键。合理的组件布局可以最大化利用光照资源&#xff0c;提高发电效率。根据安装…

Word怎么转换成PDF?介绍三种转换小妙招

Word怎么转换成PDF&#xff1f;在日常工作和学习中&#xff0c;Microsoft Word文档&#xff08;.docx&#xff09;因其强大的编辑功能而广受欢迎。然而&#xff0c;在需要将文档发送给不同用户或进行长期存档时&#xff0c;PDF格式&#xff08;.pdf&#xff09;因其跨平台兼容性…

Hyper-v下Linux虚拟机的FTP传输资源解决办法

由于linux环境下全新安装测试的需要&#xff0c;决定使用虚拟机来解决&#xff0c;正好win10 pro自带了Hyper-v 虚拟机&#xff0c;然后主机bios里开启虚拟指令支持&#xff0c;关闭hyper-v的uefi安全启动项&#xff0c;选择一个本地的ubuntu 20.04.6.iso当安装镜像&#xff0c…

数据结构与算法 - AVL树

一、概述 1. 历史 AVL树是一种自平衡二叉搜索树&#xff0c;由托尔哈斯特罗姆在1960年提出并在1962年发表。它的名字来源于发明者的名字&#xff1a;Adelson-Velsky和Landis&#xff0c;他们是苏联数学家&#xff0c;于1962年发表了一篇论文&#xff0c;详细介绍了AVL树的概念…

插画用什么软件?11款不可低估的绘图工具推荐

现如今插画已经成为设计师的必备武器&#xff0c;而你是否被插画困住过设计进度呢&#xff1f;今天。即时设计设计师就来给大家来个“投机取巧”的好方法&#xff0c;特意为大家整理了11款绘制插画软件&#xff0c;尤其是第一款更是拥有3000插画素材&#xff0c;不仅省时省力&a…

前端day3-表格

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>day3-表格</title> </head> <body&g…

社交媒体分享预览图片和内容修改

在facebook发帖分享链接时&#xff0c;设置预览图片和内容 设置预览图片和内容 <head> <meta name"description" content"我是内容" /> </head> <body><img src"./1.jpg" alt"SEO Image" style"dis…

MapStruct丝滑替换BeanUtils.copyProperties

文章目录 1 工具应用场景2 使用效果3 使用方法3.1 引入jar包3.2 指定lombok与MapStruct执行顺序3.3 定义Mapper接口3.4 重新打包 4 练习手段 1 工具应用场景 BeanUtils.copyProperties拷贝对象同名属性&#xff0c;利用反射原理&#xff0c;耗时长&#xff0c;在对性能要求高的…

SEO专家教你玩转谷歌外链!

​要想玩转谷歌外链&#xff0c;你得了解并掌握以下三种主流的外链策略。每种策略在不同情况下都有独到之处&#xff0c;具体怎么做&#xff0c;我来详细说说。 1.GPB独立站外链。这种方式主要是在数量较少的独立域名上发布全是dofollow的链接。关键在于确保链接的高质量和持久…

清洁能源时代,ARMxy智慧网关为风电行业保驾护航

在全球能源转型的背景下&#xff0c;清洁能源的发展成为了各国关注的焦点。风电作为一种可再生能源&#xff0c;具有巨大的发展潜力。而 ARMxy 工控机作为工业自动化领域的重要设备&#xff0c;在风电行业中发挥着至关重要的作用&#xff0c;为清洁能源的发展提供了有力的支持。…