文档章节

Python学习-并发编程之多线程

D7
 D7
发布于 2017/08/31 15:40
字数 1084
阅读 7
收藏 0
点赞 0
评论 0

Python学习-并发编程之多线程

threading模块概述

​ 学过Python的人应该都知道,Python是支持多线程的,并且是native的线程。本文主要是通过threading这个模块来实现多线程的,threading模块是对thread模块的二次封装,提供了更方便的API来操作线程 。目前Python对线程的支持还不够完善,不能利用多CPU,所以本文概述的都是进程下的多线程。注意:线程中没有父子关系,一个进程中可以包含N个线程,每个线程之间都是平等关系。

创建线程

​ 一般来说,使用线程有两种模式,一种是创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行;另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里。在这之前我们来介绍一下Thread类吧!

Thread类概述

# 下面只是列举一下常用的属性和方法
class Thread:
  	'''
  	group:参数一直为None;
    target:参数为线程程要执行的代码,即函数的地址;
    name:参数为线程的名称,可以自定义;
    args:即以位置传参的方式给线程程要执行的代码传递参数,传参时必须时元组形式;
    kwargs:即以关键字传参的方式给线程要执行的代码传递参数;
  	'''
    def __init__(self, group=None, target=None, name=None,
                 args=(), kwargs=None, *, daemon=None):
        pass

    def start(self):
      	'''启动线程,并调用该线程中的run()方法。'''
        pass

    def run(self):
      	'''线程启动时运行的方法,正是它去调用target指定的函数。'''
        pass

    def join(self, timeout=None):
      	'''主线程等待其它线程执行完毕才继续执行,timeout参数为等待时间。'''
        pass

    def is_alive(self):
      	'''如果线程还在运行,返回True。'''
        pass

    def getName(self):
      	'''获取线程的名字。'''
        pass

    def setName(self):
      	'''更改或设置线程的名字。'''
        pass
    

创建线程(方法一)

# 把要执行的函数地址传给线程对象
import random
from threading import Thread


# 创建一个函数,函数处理,如果一个数 可以整除2就整除,不能整除就*3+1再整除,直到结果为1
def Calculation(value, count):
    if value == 1:
        print(count)
        return
    if value % 2 == 0:
        count += 1
        value = value / 2
    else:
        value = value * 3 + 1
    Calculation(value, count)


# 注意:在windows中Thread()必须放到# if __name__ == '__main__':下
if __name__ == '__main__':
    count = 0
    # 创建线程程时,所有参数必须按关键子方式传参,且args必须为一个元组,最后一个元素末尾要加“,”
    thread_1 = Thread(target=Calculation, args=(random.randint(1, 10), count,))
    thread_2 = Thread(target=Calculation, args=(random.randint(1, 10), count,))
    # 使用start()开启子进程
    thread_1.start()
    thread_2.start()

    # 使用join()方法阻塞线程,直到线程结束
    thread_1.join()
    thread_2.join()

    print("主!")

创建线程(方法二)

# 创建一个新的类,这个类继承Thread,并将要执行的代码方放到这个新类中
import random
from threading import Thread

class Sub_Thread(Thread):				# 创建一个继承Thread的类
    def __init__(self, value, count):
        super().__init__()				# 用super()方法调用Thread类的__init__()方法
        self.value = value
        self.count = count

    def run(self):						# 注意:线程类必须有run()方法
        self.Calculation(self.value, self.count)	# run()方法中包含需要执行的代码

    def Calculation(self, value, count):  # 创建线程需要执行的函数
        if value == 1:
            print(count)
            return
        if value % 2 == 0:
            count += 1
            value = value / 2
        else:
            value = value * 3 + 1
        self.Calculation(value, count)

# 注意:在windows中Thread()必须放到# if __name__ == '__main__':下
if __name__ == '__main__':
    count = 0
    thread_1 = Sub_Thread(random.randint(1, 10), count)	# 实例化一个线程对象
    thread_2 = Sub_Thread(random.randint(1, 10), count)

    thread_1.start()		# 开启线程
    thread_2.start()
    # 使用join()方法阻塞线程,直到线程结束
    thread_1.join()
    thread_2.join()

    print("主!")

Thread类其他属性及方法的应用:

# Thread类的其他属性及方法概述:

# daemon属性
thread_1.daemon = True		# 开启守护进程,即父进程结束后,不管子进程是否运行完都一起结束

# getName()方法
# 获取线程的名称
thread_name = thread_1.getName()

# setName()方法
thread_1.setName('Calculation_1')   # 设置线程的名称

# is_alive()方法
thread_1.is_alive()		# 返回线程的状态,布尔值

# join()方法
thread_1.join(3)			# 等待线程结束,如果线程不结束,程序则不往下执行,等待时间为3秒

© 著作权归作者所有

共有 人打赏支持
D7

D7

粉丝 0
博文 5
码字总数 5326
作品 0
海淀
技术主管
Python高级编程和异步IO并发编程

Python高级编程和异步IO并发编程 网盘地址:https://pan.baidu.com/s/1eB-BsUacBRhKxh7qXwndMQ 密码: tgba 备用地址(腾讯微云):https://share.weiyun.com/5Z3x9V0 密码:7cdnb2 针对Pytho...

人气王子333 ⋅ 04/23 ⋅ 0

Python:经过了十几年,你们还没有消除的对我的误解吗?

摘要: 大学毕业到现在用的最多的编程语言还是C,C++,后来学习了一下Python,觉得Python是门学了不后悔的语言。尤其适合非程序员学习,作为青少年学习计算机的首门语言也不错,大学生学习计...

雁横 ⋅ 05/03 ⋅ 0

荐书丨确认过眼神,这份Python书单一定是你的菜

点击上方“程序人生”,选择“置顶公众号” 第一时间关注程序猿(媛)身边的故事 Python 是军刀型的开源工具,被广泛应用于Web 开发、爬虫、数据清洗、自然语言处理、机器学习和人工智能等方...

csdnsevenn ⋅ 05/05 ⋅ 0

5个python爬虫教材,让小白也有爬虫可写,含视频教程!

认识爬虫   网络爬虫,如果互联网是一张蜘蛛网,网络爬虫既是一个在此网上爬行的蜘蛛,爬了多少路程即获取到多少数据。 python写爬虫的优势   其实以上功能很多语言和工具都能做,但是用...

柯西带你学编程 ⋅ 06/12 ⋅ 0

Python怎么利用多核cpu

原文链接http://www.cnblogs.com/stubborn412/p/4033651.html def dead_loop(): def dead_loop(): {void DeadLoop() { while (true); } } from threading import Thread lib = cdll.LoadLibr......

dby_freedom ⋅ 05/06 ⋅ 0

推荐几本对于Python初学者比较好的书籍(内含PDF)

我们提供一个初学者最好的Python书籍列表。Python是一个初级程序员可以学习编程的最友好语言之一。为了帮助您开始使用Python编程,我们分享此列表。泡一杯茶,选一本书阅读,开始使用Python编...

柯西带你学编程 ⋅ 06/08 ⋅ 0

给伸手党的福利:Python 新手入门引导

这是一篇 Python 入门指南,针对那些没有任何编程经验,从零开始学习 Python 的同学。不管你学习的出发点是兴趣驱动、拓展思维,还是工作需要、想要转行,都可以此文作为一个参考。 在这个信...

crossin ⋅ 06/15 ⋅ 0

5本必读Python入门书籍,你都看过吗?(附福利)

今天技术学派为大家准备了5本Python入门书籍,除了书籍小编还整理了3个常用的资源网站分享给大家。 1.Python基础教程 《Python基础教程》是经典的Python入门教程书籍,本书层次鲜明,结构严谨...

Python燕大侠 ⋅ 06/07 ⋅ 0

学习Python必去的8个网站!

作为一个现时代的程序员初学者,除了看书之外,互联网的学习手段也是断不能少的! 以下这些网站,虽说不上全方位的满足你的需求,但是大部分也都能! 0.国外的大神GitHub : https://github...

W3Cschool ⋅ 06/14 ⋅ 0

Python是如何怼翻其他编程语言而窜上宝座的

来PK啊! 谁怕谁啊! 在过去的两年间,Python一路高歌猛进,成功窜上“最火编程语言”的宝座。 更可怕的是,这把火不仅仅是在程序员的圈子里越烧越旺,甚至还烧到了程序员的圈子外,从小学生...

超级数学建模 ⋅ 04/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部