#(1) 一个进程里包含了多个线程,线程之间是异步并发
from threading import Thread
from multiprocessing import Process
import os , time , random
def func(i):
time.sleep(random.uniform(0.1,0.9))
print(“当前进程号:{}”.format(os.getpid()) , i)
if name == “__main__”: #线程里面这句话可以不加
for i in range(10):
t = Thread(target=func,args=(i,))
t.start()
print(os.getpid())
如下可见,子线程中的进程号与主进程号一样,并且子线程和主进程之间是异步并发的
#(2) 并发的多进程和多线程之间,多线程的速度更快
#多线程速度
def func(i):
print( "当前进程号:{} , 参数是{} ".format(os.getpid() , i) )
if name == “__main__”:
lst = []
startime = time.time()
for i in range(10000):
t = Thread(target=func,args=(i,))
t.start()
lst.append(t)
print(lst)
for i in lst:
i.join()
endtime = time.time()
print(“运行的时间是{}”.format(endtime - startime) ) # 运行的时间是1.8805944919586182
#多进程速度
if name == “__main__”:
lst = []
startime = time.time()
for i in range(10000):
p = Process(target=func,args=(i,))
p.start()
lst.append§
print(lst)
for i in lst:
i.join()
endtime = time.time()
print(“运行的时间是{}”.format(endtime - startime) ) # 运行的时间是101.68004035949707
多进程:1000个进程耗时9.06秒
多线程:多线程之间,数据共享,可以直接操作数据。1000个线程耗时0.087秒,差距巨大,所以对于IO密集型,还是用多线程较快
多进程执行计算密集型,如果各个进程间各计算各的,不用共享数据,由于可以使用多核,比多线程快。
如果是各个进程间数据共享,同步计算最终结果,多进程反而非常慢,远远慢于多线程
#(3) 多线程之间,数据共享
num = 100
lst = []
def func():
global num
num -= 1
for i in range(100):
t = Thread(target=func)
t.start()
lst.append(t)
for i in lst:
i.join()
print(num)
多线程之间共享数据,可以直接操作
2、自定义线程类
#用类定义线程,必须手动调用父类__init__方法,必须重载父类run方法,定义自己线程类逻辑
from threading import Thread
import os,time
(1)必须继承父类Thread,来自定义线程类
class MyThread(Thread):
def __init__(self,name):
手动调用父类的构造方法
super().init()
自定义当前类需要传递的参数
self.name = name
def run(self):
print( “当前进程号{},name={}”.format(os.getpid() , self.name) )
if name == “__main__”:
t = MyThread(“我是线程”)
t.start()
print( “当前进程号{}”.format(os.getpid()) )
新版:
#自定义线程类
from threading import Thread,current_thread
(1)必须继承父类Thread,来自定义线程类
class MyThread(Thread):
def __init__(self,name):
手动调用父类的构造方法
super().init()
自定义当前类需要传递的参数
self.name = name
def run(self):
print(f"当前线程的线程号是{current_thread().ident}")
if name == ‘__main__’:
for i in range(10):
t = MyThread(f"线程{i}")
t.start()
(2)线程中的相关属性
线程.is_alive() 检测线程是否仍然存在
线程.setName() 设置线程名字
线程.getName() 获取线程名字
1.currentThread().ident 查看线程id号 新版用current_thread().ident
2.enumerate() 返回目前正在运行的线程列表
3.activeCount() 返回目前正在运行的线程数量
getName,setName被弃用了
新版:
def func():
time.sleep(1)
if name == “__main__”:
t = Thread(target=func)
t.start()
检测线程是否仍然存在
print( t.is_alive() )
线程.getName() 获取线程名字
print(t.getName())
设置线程名字
t.setName(“抓API接口”)
print(t.getName())
from threading import currentThread
from threading import enumerate
from threading import activeCount
def func():
time.sleep(0.1)
print(“当前子线程号id是{},进程号{}”.format( currentThread().ident ,os.getpid()) )
if name == “__main__”:
t = Thread(target=func)
t.start()
print(“当前主线程号id是{},进程号{}”.format( currentThread().ident ,os.getpid()) )
for i in range(5):
t = Thread(target=func)
t.start()
返回目前正在运行的线程列表
lst = enumerate()
print(lst,len(lst))
返回目前正在运行的线程数量 (了解)
print(activeCount())
新版:
### 线程中的相关属性
import time
from threading import Thread,current_thread
from threading import enumerate
from threading import active_count
def func():
time.sleep(1)
print(f"当前子线程的线程号{current_thread().ident}")
if name == ‘__main__’:
for i in range(5):
t = Thread(target=func)
t.start()
#设置线程名
t.name = f"抓API接口{i}"
返回目前正在运行的线程列表
lst = enumerate()
print(lst,len(lst))
返回目前正在运行的线程数量 (了解)
print(active_count())
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。
最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。
最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。
学习路线图
其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。
相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。
网络安全工具箱
当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。
项目实战
最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
面试题
归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!文章来源:https://www.toymoban.com/news/detail-844942.html
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算文章来源地址https://www.toymoban.com/news/detail-844942.html
不能错过!
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
到了这里,关于Python的多线程,守护线程,线程安全_python多线程安全的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!