首页 > 其他分享 >threading多线程使用

threading多线程使用

时间:2023-04-12 21:25:45浏览次数:31  
标签:join start self share threading 线程 使用 多线程

当我们调用某段代码时需要等待一段时间后才能进行后续的操作,而这期间计算资源并未占满,这就浪费了CPU的资源和时间,此时可以采用多线程进行并行计算。

如当我们使用爬虫爬取网络资源时,某个资源的爬取过程由于网络因素需要等待,而后续的资源清洗和整合等需要等待,此时可以将资源分多份同时进行爬取,等全部爬取完后进行后续操作,这就可以利用多线程技术。

关键词:CPU未占满,阻塞

 

python3自带threading库

使用如下

  使用threading为父类定义类

class ShareThread(threading.Thread):
    def __init__(self, threadID):
        threading.Thread.__init__(self)
        self.threadID = threadID
    
    def run(self):
        myfunc()
        pass
        
    def myfunc(self):
        pass

 

  创建对象,调用,添加阻塞

#创建对象,参数为线程ID
share_1 = ShareThread('thread_1')
share_2 = ShareThread('thread_2')

#开始子线程,即运行self.run函数
share_1.start()
share_2.start()

#添加线程进阻塞状态,在该线程完成之前不运行主线程
share_1.join()
share_2.join()

 

关于阻塞:

  有些程序子线程未结束则进入主线程会导致数据错乱等操作,需要等待子线程结束再开始下面的操作,此时需要添加join进入阻塞队列,注意的是,多个子线程之间如果第二个线程start之前先调用了第一个线程的join,则会导致该线程start不了,直到第一个线程阻塞结束,所以需要根据项目需求合理安排start和join先后位置

标签:join,start,self,share,threading,线程,使用,多线程
From: https://www.cnblogs.com/toriyung/p/17311291.html

相关文章

  • 别名的使用场景
    SQL语句可以为表名称或列名称指定别名。(别名有时也称为导出列,不管是导出列还是别名,它们所代表的都是相同的东西。)SQL别名SQL别名用于为表或表中的列提供临时名称。SQL别名通常用于使表名或列名更具可读性。SQL一个别名只存在于查询期间。别名使用AS关键字赋......
  • Design各控件的搭配使用4
    在上一个版本基础上添加两个Activity:EffectsActivity&TabLayoutActivityEffectsActivity测试了一种效果;TabLayoutActivity中使用的控件:android.support.design.widget.TabLayoutandroid.support.v4.widget.NestedScrollViewandroid.support.design......
  • 63、K8S-使用K8S部署Prometheus、grafana
    Kubernetes学习目录1、准备工作1.1、教程Github地址https://github.com/prometheus-operator/kube-prometheus.git1.2、下载编写好的yamlwgethttps://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.12.0.tar.gz1.3、解压项目代码tarxvfkub......
  • CentOS系统使用docker-compose安装Doris数据库
    doris当前最新版本为1.2.31、docker与docker-compose安装    docker安装:CentOS安装Docker   docker-compose安装:docker-compose安装与使用2、doris相关下载   1)doris-be、doris-fe2) 3、修改vi/etc/security/limits.conf添加如下信息:*softnofile65......
  • vim编辑器的使用
    vim是vi的升级版本,vim默认不安装,vi默认安装命令模式:   yy复制当前行   5yy向下复制5行 copy   dd删除(剪切)当前行   5dd向下删除5行delete、   p粘贴paste   u撤销 undo   ctrl+r 恢复 redo   1G 第1行 go   10G 10行......
  • Go微服务框架go-kratos实战学习08:负载均衡基本使用
    微服务框架go-kratos中负载均衡使用一、介绍在前面这篇文章负载均衡和它的算法介绍,讲了什么是负载均衡以及作用、算法介绍。go-kratos的负载均衡主要接口是Selector,它是一个可插拔的设计。因为它设计的都是接口,只要实现了接口就实现了负载均衡。go-kratos在目录下提供了......
  • java多线程 - 狂神
    多线程实现方法第一种方法:Thread自定义线程类继承Thread类重写run()方法,编写线程执行体创建线程对象,调用start()方法启动线程注意:线程不一定立即执行,由CPU安排调度继承Thread类创建多线程packagecom.waves.dxcdemo;​importjava.text.DateFormat;importja......
  • MultiValueMap在post请求中的使用
    如果data-form的方式处理post,有点区别,做个记录publicStringrobotSpeak(StringspeakMsg){log.info("机器人语音播报请求:{}",speakMsg);//headerHttpHeadersheaders=newHttpHeaders();headers.setContentType(MediaType.A......
  • 20230412-Python-pycharm使用技巧
     1.新建文件,自动生成代码       2.自动补齐自定义段落        3.修改注释颜色        ......
  • springboot整合阿里云OSS实现多线程下文件上传(aop限制文件大小和类型)
    内容涉及:springboot整合阿里云oss自定义注解及aop的使用:对上传文件格式(视频格式、图片格式)、不同类型文件进行大小限制(视频和图片各自自定义大小)线程池使用:阿里云OSS多线程上传文件阿里云OSS分片上传大文件 业务需求需求一:前端传递单个或多个小文件(这里......