day31 线程

 

01 进程间通信

 

"""
队列:先进先出
堆栈:先进后出
"""
from multiprocessing import Queue
q = Queue(5)  # 括号内可以传参数 表示的是这个队列的最大存储数
# 往队列中添加数据
q.put(1)
q.put(2)
print(q.full())  # 判断队列是否满了
q.put(3)
q.put(4)
q.put(5)
print(q.full())
# q.put(6)  # 当队列满了之后 再放入数据 不会报错 会原地等待 直到队列中有数据被取走(阻塞态)print(q.get())
print(q.get())
print(q.get())
print(q.empty())  # 判断队列中的数据是否取完
print(q.get())
print(q.get())
print(q.empty())
print(q.get_nowait())  # 取值 没有值不等待直接报错
# print(q.get())  # 当队列中的数据被取完之后 再次获取 程序会阻塞 直到有人往队列中放入值
"""
full
get_nowait
empty
都不适用于多进程的情况
"""

 

02 进程间通信IPC机制

from multiprocessing import Queue, Processdef produce(q):q.put('hello,baby~')def consumer(q):print(q.get())if __name__ == '__main__':q = Queue()p = Process(target=produce, args=(q,))  # target(把...作为目标)c = Process(target=consumer, args=(q,))p.start()c.start()

 

03 生产者消费者模型

"""
生产者:生产/制造数据的
消费者:消费/处理数据的
例子:做包子的,买包子的1.做包子远比买包子的多2.做包子的远比包子的少供需不平衡的问题
"""# # multiprocessing:多重处理from multiprocessing import Process, Queue, JoinableQueue
import time
import randomdef producer(name, food, q):for i in range(1, 10):data = f"{name}做了第{i}份{food}"time.sleep(random.random())  # 随机睡1秒之内
        q.put(data)print(data)def consumer(name, q):while True:data = q.get()if data == None: breakprint(f"{name}吃了{data}")time.sleep(random.random())q.task_done()if __name__ == '__main__':q = JoinableQueue()p1 = Process(target=producer, args=('jason', '馒头', q))p2 = Process(target=producer, args=('tank', '生蚝', q))c1 = Process(target=consumer, args=('ryan', q))c2 = Process(target=consumer, args=('ami', q))p1.start()p2.start()c1.daemon = Truec2.daemon = Truec1.start()c2.start()p1.join()p2.join()q.join()  # 等队列中数据全部取出

 

04 线程

什么是线程进程线程其实都是虚拟单位,都是用来帮助我们形象的描述某种事物进程:资源单位线程:执行单位将内存比如成工厂那么进程就相当于是工厂里面的车间而你的线程就相当于是车间里面的流水线ps:每个进程都自带一个线程,线程才是真正的执行单位,进程只是在线程运行过程中提供代码运行所需要的资源为什么要有线程开进程1.申请内存空间  耗资源2."拷贝代码"    耗资源开线程一个进程内可以起多个线程,并且线程与线程之间数据是共享的ps:开启线程的开销要远远小于开启进程的开销如何使用线程

 

05 创建线程的两种方式

import time
from threading import Threaddef run(name):print(f"{name} is running.")time.sleep(2)print(f"{name} is stop.")t = Thread(target=run, args=('ryan',))  # TypeError: run() takes 1 positional argument but 4 were given
t.start()


import time from threading import Threadclass MyThread(Thread):def __init__(self, name):super().__init__()self.name = namedef run(self):print(f"{self.name} is running.")time.sleep(2)print(f"{self.name} is over.")t = MyThread('ryan') t.start() print('')

 

06 线程对象及其他方法

# 查看线程的活跃数
import os
import time
from threading import Thread, active_count, current_threaddef task(name, i):print(f"{name} is running")print("主current_thread", current_thread().name)print(os.getpid())time.sleep(i)print(f"{name} is over")t1 = Thread(target=task, args=('ryan', 1))
t2 = Thread(target=task, args=('ryan', 2))
t1.start()
t2.start()
t2.join()
print("当前活跃线程数", active_count())
print('')
print("主current_thread", current_thread().name)
print(os.getpid())

 

07 守护线程

import time
from threading import Thread,current_threaddef task(i):print(current_thread().name)time.sleep(i)t = Thread(target=task, args=(1,))t.daemon = True
t.start()
print('')

 

08 线程间通信

from threading import Threadmoney = 666def task():global moneymoney = 999t = Thread(target=task)
t.start()
t.join()
print(money)

 

09 互斥锁

from threading import Thread, Lock
import timen = 100def task(mutex):global nmutex.acquire()  # 获得tmp = ntime.sleep(0.1)n = tmp - 1mutex.release()t_list = []
mutex = Lock()
for i in range(100):t = Thread(target=task, args=(mutex,))t.start()t_list.append(t)
for t in t_list:t.join()
print(n)

 

10 小例子

from threading import Thread
from multiprocessing import Process
import time
def foo():print(123)time.sleep(1)print("end123")def bar():print(456)time.sleep(3)print("end456")if __name__ == '__main__':t1=Thread(target=foo)t2=Thread(target=bar)t1.daemon=Truet1.start()t2.start()print("main-------")

 

转载于:https://www.cnblogs.com/Ryan-Yuan/p/11343434.html

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

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

相关文章

机器学习理论基础到底有多可靠?

来源:机器学习算法与Python实战选自:aidancooper.co.uk 作者:Aidan Cooper编译:机器之心 知其然,知其所以然。机器学习领域近年的发展非常迅速,然而我们对机器学习理论的理解还很有限,有些模型…

07.MyBatis中的关联查询

关联查询&#xff1a; 一对一&#xff1a; 两种方式实现: 1.通过业务扩展的方式进行一对一查询&#xff0c;新建一个实体类&#xff0c;继承其中属性多的一个&#xff0c;然后写上另一个类中的属性&#xff1a; 实体类: 映射文件: 1 <!-- 业务扩展的方式进行一对一查询&…

黄仁勋回应放弃收购Arm:公司战略并没有太大改变

来源&#xff1a;网易智能2月21日消息&#xff0c;芯片巨头英伟达不久前公布了2022财年第四财季财报&#xff0c;显示其营收较上年同期猛增53%&#xff0c;游戏、数据中心和专业可视化市场平台也都实现了创纪录的收入。财报发布后&#xff0c;该公司首席执行官黄仁勋接受美国科…

无生命的AI算不上「智能」

来源&#xff1a;AI前线作者&#xff1a;Ben Dickson译者&#xff1a;王强策划&#xff1a;刘燕什么是智能&#xff1f;以非常快的速度解决复杂的数学问题就算智能吗&#xff1f;在国际象棋中击败世界冠军的力量算智能吗&#xff1f;分辨图像中数千个不同对象的能力算智能吗&am…

MySQL 练习 创建表格2

|--需求说明 #实践课&#xff0c;使用SQL语句创建成绩表#要求&#xff1a;在数据库myschool中&#xff0c;使用SQL语句创建成绩表result&#xff0c;result的结构表见书上 |--实现思路 采用创建表的语句完成 |--代码内容 #实践课&#xff0c;使用SQL语句创建成绩表 #要求&#…

前沿速递:因果涌现在多种因果衡量标准下普遍存在

来源&#xff1a; 集智俱乐部作者&#xff1a;陈昊编辑&#xff1a;邓一雪导语因果涌现理论指出&#xff0c;在宏观尺度下观察复杂系统可以减少因果关系中的噪声&#xff0c;从而得到具有更强因果关联的系统。目前该理论已经在有效信息和整合信息的因果度量标准下得到的验证&am…

类脑计算的一大突破 BrainScaleS-2

来源&#xff1a;混沌巡洋舰今天最成功的人工智能算法&#xff0c;人工神经网络&#xff0c;是基于我们大脑中错综复杂的真实神经网络。但与我们高效的大脑不同的是&#xff0c;在计算机上运行这些算法消耗了惊人的能量: 最大型的模型在训练全过程中消耗的能量几乎相当于五辆汽…

委托、Lambda表达式、事件系列07,使用EventHandler委托

谈到事件注册&#xff0c;EventHandler是最常用的。 EventHandler是一个委托&#xff0c;接收2个形参。sender是指事件的发起者&#xff0c;e代表事件参数。 □ 使用EventHandler实现猜拳游戏 使用EventHandler实现一个猜拳游戏&#xff0c;每次出拳&#xff0c;出剪刀、石头、…

2022年国家自然科学基金指南发布情况

来源&#xff1a;锐动源编辑部近日&#xff0c;2022年国家自然科学基金部分项目申报指南已陆续发布。据不完全统计&#xff0c;截至目前2022年国家自然科学基金已发布32个项目的申报指南&#xff0c;其中“国家自然科学基金委员会与日本学术振兴会合作与交流项目”已发布获资助…

最简单概率论的五个智慧

来源 &#xff1a;罗辑思维在我认为人人都应该学一些概率知识&#xff0c;它现在是公民的必备知识。现在的世界比过去复杂得多&#xff0c;其中有大量不确定性&#xff0c;是否理解概率&#xff0c;直接决定一个人的开化程度。01随机&#xff1a;有些事情是无缘无故地发生的这个…

谷歌AI一次注释了10%的已知蛋白质序列,超过人类十年研究成果

来源&#xff1a;ScienceAI编辑 &#xff1a;泽南、张倩和 AlphaFold 不同&#xff0c;这次谷歌探索的是用深度学习给蛋白质打上功能标签。蛋白质是组成人体一切细胞、组织的重要成分。机体所有重要的组成部分都需要有蛋白质的参与。目前已知存在的蛋白质种类有数十亿&#xff…

你真的了解计算生物学和AI for Science吗?

来源&#xff1a;量子位Q1&#xff1a;AlphaFold2的最大意义是什么&#xff1f;A1&#xff1a;这个看似突破性的进展&#xff0c;其实是技术演进的必然结果。 此外&#xff0c;如果我们换个视角来看待这个问题&#xff0c;蛋白质结构预测仅仅是计算生物学这个大门类里面一个相对…

Stephen Wolfram专访Judea Pearl:从贝叶斯网络到元胞自动机

来源&#xff1a; 集智俱乐部编译&#xff1a;闫和东、徐培 编辑&#xff1a;邓一雪 导语2022年人工智能与数学国际研讨会&#xff08;ISAIM 2022&#xff09;恰逢著名计算机科学家、贝叶斯网络之父 Judea Pearl 85岁生日&#xff0c;会议期间Mathematica创始人 Stephen Wolfra…

day32 并发编程之锁

并发编程之锁 1. GIL全局解释器锁 2. GIL与普通的互斥锁 3. 死锁 4. 信号量 5. event事件 6. 线程q 1. GIL全局解释器锁 """ In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytec…

马斯克Neuralink被曝“虐杀实验猴”,140万元美金项目遭谴责

来源&#xff1a; 学术头条作者&#xff1a;刘芳编辑&#xff1a;黄珊2021 年 4 月&#xff0c;马斯克公布了一段猴子用意念玩乒乓球游戏的视频&#xff0c;一时间为他旗下的脑机接口公司 Neuralink 赚足了眼球。然而最近&#xff0c;这些被用来做脑机接口实验的猴子的经历&…

死前真的会有「跑马灯」,人类首次同步测量大脑濒死状态

来源&#xff1a;新智元编辑&#xff1a;袁榭 好困或许&#xff0c;人死前可能真会眼前出现人生跑马灯&#xff01;最近&#xff0c;神经科学家在记录了一个濒临死亡的人类大脑的活动之后发现&#xff0c;人在死亡前后有节奏的脑电波模式与做梦、回忆记忆和冥想时出现的模式相似…

七牛图片盲水印

注意 暂时不支持从 dora 数据处理直接调该接口&#xff0c;只支持从 kodo 存储调用。即 cdn 域名不可开通图片瘦身调用形式 资源 http://i.iamlj.com/19-08-12/123936.png 处理参数 watermark/6/method/encode/text/aGVsbG8gcWluaXU 新图 http://i.iamlj.com/19-08-12/123936-w…

「最小细胞」的3D数字模型,计算揭示生命最基本的要求

来源&#xff1a;ScienceAI编辑&#xff1a;萝卜皮无论是海洋深处的奇异生物还是我们体内的细菌&#xff0c;地球上的所有生命都是由细胞组成的。但我们对这些细胞中最简单的细胞如何运作只有一个非常粗略的了解。伊利诺伊大学厄巴纳-香槟分校的一个团队创建了有史以来最完整的…

Yann LeCun最新发声:自监督+世界模型,让 AI 像人类与一样学习与推理

来源&#xff1a;AI科技评论作者&#xff1a;维克多、西西、王晔编辑&#xff1a;陈彩娴如何突破当代人工智能&#xff08;AI&#xff09;的瓶颈&#xff1f;不同学者存在不同观点。总体来看可以概括为两类&#xff0c;其一监督学习者&#xff0c;提倡通过改善数据标签质量&…

两大头号玩家 一个伟大愿景: 联邦学习的元生态建设美好世界

来源&#xff1a;IEEE标准协会新年伊始&#xff0c;世界领先的标准制定机构IEEE标准协会牵头&#xff0c;组织了2022年度联邦学习领域首场重量级尖峰交流活动——联邦学习首创团队带头人、谷歌研究院副总裁Blaise Agura y Arcas博士&#xff0c;与联邦学习亚洲奠基人、IEEE联邦…