关于Thread.start()后的困惑、imap

news2024/11/26 3:27:01

在for循环中,接着开thread,开完就start,当时有个困惑,就是比如开的一个thread的这个start执行完,但是这个for循环还没执行完,那程序会跑到for循环的后面逻辑吗?

比如下面13行for循环开始开第一个first_thread,并且first_thread也在start,然后这个start结束了,但是for循环还没结束 ,那么程序的逻辑会跑到19行吗?不会的,因为主进程还在for循环跑,线程跑完了,它应该就结束了,它不是主进程。所以会等着for循环执行完,才执行19行。从最后的执行结果就可以看出是等待for循环结束了才执行19行。

import time
from threading import Thread

def count(x, y):
    c = 0
    while c < 3:
        c += 1
        x += x
        y += y

if __name__ == '__main__':
    counts = []
    for x in range(10):
        thread = Thread(target=count, args=(1, 1))
        time.sleep(3)
        print('one')
        counts.append(thread)
        thread.start()
    for thread in counts:
        print('two')
        thread.join()

另外join的方法:“This blocks the calling thread until the thread whose join() method is called terminates -- either normally or through an unhandled exception or until the optional timeout occurs.”,我们也看到,一旦线程执行完,其会自动终止,那么couts中记录的每个thread的变量是有一些属性,这些属性记录线程是否执行完,如下图:

所以我之前的困惑是,既然线程执行完,那么counts中记录的变量应该就失效了,对应的其变量调用join()方法应该也调用不了,这么理解其实是错误的。正确的是这些变量还有效,只不过其start()方法已经执行完了。

另外Pool.imap一旦定义了,这个方法会返回一个迭代器,不管这个迭代器有没有在后面使用,只有执行这句的下一句其imap已经开了进程在跑,其结果会写到内存中,需注意内存溢出。

from multiprocessing.pool import ThreadPool, Pool

def count(x):
    print('start---')
    return x


if __name__ == '__main__':
    pool = Pool()
    ret_iter = pool.imap(count, [1])
    print('test')
    print('test---')
    for i in ret_iter:
        print(i)

从下图打的断点可以看出,其已经在开进程跑了,不过如果直接跑,不debug,那么可能打印顺序不对,因为开的进程跑的速度问题

参考:

  1. https://blog.csdn.net/qq_26460841/article/details/110420572

  1. https://blog.csdn.net/weixin_39765280/article/details/111629605?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-111629605-blog-110420572.pc_relevant_aa&spm=1001.2101.3001.4242.1&utm_relevant_index=3

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

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

相关文章

浅谈子网掩码、IP地址、网络地址之间关系

文章目录一、什么是子网掩码二、给定IP地址&#xff0c;如何求网络地址网络标识&#xff08;net-id&#xff09;和主机标识&#xff08;host-id&#xff09;计算步骤三、CIDR地址表示方法(Classless Inter Domain Routing)四、IP地址与MAC地址一、什么是子网掩码 在TCP/IP协议…

阿里云云原生每月动态 | 聚焦实战,面向开发者的系列课程全新上线

作者&#xff1a;云原生内容小组 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》&#xff0c;从趋势热点、产品新功能、服务客户、开源与开发者动态等方面&#xff0c;为企业提供数字化的路径与指南。 本栏目每月更新。 趋势热点 《云原生实战指南》白皮书发布 …

如何使用金山轻维表发送生日祝福、入职纪念日祝福

作为企业HR或行政&#xff0c;如果能在员工生日当天发送一份生日祝福生日礼物&#xff0c;是不是可以给员工强烈的归属感和惊喜&#xff0c;但核查员工生日需要每天对着花名册查询&#xff0c;或单独设置提醒&#xff0c;对HR行政来说又比较繁琐复杂&#xff0c;还经常容易忘&a…

matlab - 特殊矩阵、矩阵求值、稀疏矩阵

学习视频1.特殊矩阵1.1 通用特殊矩阵format % 零矩阵(全0) 幺矩阵(全1) 单位矩阵 % zeros ones eye rand(生成0~1的随机元素) randn(生成均值为1&#xff0c;方差为0的符合正太分布的随机阵)zeros(3) % 3x3的全0方阵 zeros(3, 4) % 3x4的全0矩阵 exA ones(3, 5) % 3x5的…

mapbox-gl实现 2.5D 图层高度编辑器

文章目录前言表达式逻辑mapbox表达式转数学表达式数学表达式转mapbox表达式实现效果前言 mapbox-gl 支持表达式编辑 2.5D 建筑物高度&#xff0c;但是 style 文件原生的表达式很不直观&#xff0c;本文实现一个简单的 2.5D高度图层编辑器&#xff0c;核心是理解mapbox表达式规…

【Sentence Simplification via Large Language Models 论文精读】

Sentence Simplification via Large Language Models 论文精读InformationAbstract1 Introduction2 Related Work3 Sentence Simplification via LLMs4 Experiments4.1 Evaluation Settings4.2 Automatic Evaluation4.3 Human Evaluation4.4 Qualitative Study4.5 Ablation Stu…

开发同城外卖系统源码时应配置哪些功能?外卖系统源码分析

外卖系统大家都不会陌生&#xff0c;我们都会想到某团、某饿这两个行业top&#xff0c;他们已经成为了年轻人手机必备软件之一&#xff0c;而且除了app端外&#xff0c;他们还很贴心开发了微信小程序的版本&#xff0c;免去了下载app的繁琐&#xff0c;打开微信就能使用。那么&…

阿里开源自研高性能核心搜索引擎 Havenask

去年12月&#xff0c;阿里开源了自研的大规模分布式搜索引擎 Havenask&#xff08;内部代号 HA3&#xff09;。 &#xfeff; Havenask 是阿里巴巴内部广泛使用的大规模分布式检索系统&#xff0c;支持了淘宝、天猫、菜鸟、优酷、高德、饿了么等在内整个阿里的搜索业务&#…

点击糖化学试剂361154-30-5,Ac4ManNAz,1,3,4,6-四-O-乙酰基-N-叠氮乙酰基氨基甘露糖

Ac4ManNAz产品描述&#xff1a;N-叠氮乙酰基甘露糖胺-三酰化&#xff08;AC4MANAZ&#xff09;可用作标记试剂&#xff0c;点击糖化学试剂&#xff0c;叠氮化物基团允许它与炔烃反应&#xff0c;是一种含叠氮的代谢糖蛋白标记试剂&#xff0c;叠氮化物修饰的蛋白质可以通过与炔…

webman apidoc安装、生成接口文档

1 npm install apidoc -g 2 apidoc -h 3 新建 apidoc.json { "name": "demo", "version": "1.0.0", "description": apidoc demo", "title": "demo",…

如何提高大数据传输的安全性

面对大数据传输安全相关的挑战和威胁&#xff0c;业界针对安全防护技术进行了针对性的实践和调研。本文主要从平台安全、数据安全、隐私保护三个方面对大数据传输安全技术的发展进行阐述。 如何安全地改进大数据传输&#xff1f; 平台安全、数据安全、隐私保护等相关技术不断完…

springboot原项目配置文件迁移至nacos

目录一、配置文件迁移nacos1.安装nacos2.添加依赖3.改造service-product3.改造server-gateway一、配置文件迁移nacos 1.安装nacos 1&#xff0c;如果之前安装过nacos&#xff0c;nacos数据保存至mysql&#xff0c;先删除已安装的nacos&#xff0c;再安装 docker stop nacos …

自动化测试——多窗口切换和切换frame

这里写目录标题一、多窗口切换1、base.py&#xff1a;公共代码2、切换句柄的方式1&#xff0c;通过for循环3、切换句柄的方式2&#xff0c;通过索引切换4、源代码二、frame窗口1、什么是frame?2、Frame 分类3、判断要定位的元素在不在frame中两种方式方式一&#xff1a;鼠标选…

【Linux】P1 Linux 基础命令(3月3日完成)

Linux 基础命令Linux 目录结构Linux 命令ls 展示命令cd 目录切换命令pwd 查看当前工作目录mkdir 创建新的文件夹其他补充知识前言 本节内容&#xff1a; Linux 基本命令 下节内容&#xff1a; Linux vi 编辑器。 链接&#xff1a; 正文 Linux 目录结构 在耳熟能详的 Windows …

openpnp - error - 吸嘴没下降到板子上, 就将元件松开

文章目录openpnp - error - 吸嘴没下降到板子上, 就将元件松开概述笔记ENDopenpnp - error - 吸嘴没下降到板子上, 就将元件松开 概述 以前用过国内一家openpnp厂家出的设备, 他们家的openpnp是自己改过的. 贴片流程已经走过一遍. 这次还是按照以前记录的笔记, 按照国内那家的…

认识JavaScript中的防抖函数

&#x1f468; 作者简介&#xff1a;大家好&#xff0c;我是Taro&#xff0c;前端领域创作者 ✒️ 个人主页&#xff1a;唐璜Taro &#x1f680; 支持我&#xff1a;点赞&#x1f44d;&#x1f4dd; 评论 ⭐️收藏 文章目录前言一、防抖是什么&#xff1f;1. deounce-v1的基本…

营业执照注册资本是什么意思

一、营业执照注册资本是什么意思 营业执照上的注册资本是指合营企业在登记管理机构登记的资本总额&#xff0c;是合营各方已经缴纳的或合营者承诺一定要缴纳的出资额的总和。我国法律、法规规定&#xff0c;合营企业成立之前必须在合营企业合同、章程中明确企业的注册资本&…

计算机网络安全基础知识2:http超文本传输协议,请求request消息的get和post,响应response消息的格式,响应状态码

计算机网络安全基础知识&#xff1a; 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&#xff0c;尤…

三周爆赚千万 电竞选手在无聊猿游戏赢麻了

如何用3个星期赚到1千万&#xff1f;普通人做梦都不敢想的事&#xff0c;电竞职业选手Mongraal却用几把游戏轻易完成&#xff0c;赚钱地点是蓝筹NFT项目Bored Ape Yacht Club&#xff08;BAYC无聊猿&#xff09;出品的新游戏Dookey Dash。 这款游戏类似《神庙逃亡》&#xff0…

【python】python-socketio+firecamp使用踩坑指南

server.py: import eventlet import asyncioeventlet.monkey_patch()import socketio import eventlet.wsgisio socketio.Server(async_modeeventlet, cors_allowed_origins*) # 指明在evenlet模式下sio.event def connect(sid, environ):print(f"connect, sid{sid}, e…