博客
关于我
python笔记7-多线程threading之函数式
阅读量:470 次
发布时间:2019-03-06

本文共 3664 字,大约阅读时间需要 12 分钟。

前言

1.python环境2.7

2.threading模块系统自带

单线程

1.平常写的代码都是按顺序挨个执行的,就好比吃火锅和哼小曲这两个行为事件,定义成两个函数,执行的时候,是先吃火锅再哼小曲,这种就是单线程的行为。

# coding:utf-8import timedef chi():    print("%s 吃火锅开始:" % time.ctime())    time.sleep(1)    print("%s 吃火锅结束--" % time.ctime())def heng():    print("%s 哼着小曲开始:" % time.ctime())    time.sleep(1)    print("%s 哼着小曲结束--" % time.ctime())if __name__ == "__main__":    chi()    heng()

Thu Jan 11 16:32:37 2018 吃火锅开始:

Thu Jan 11 16:32:38 2018 吃火锅结束--
Thu Jan 11 16:32:38 2018 哼着小曲开始:
Thu Jan 11 16:32:39 2018 哼着小曲结束--

2.生活中我们是可以一边吃火锅一边哼小曲的,那么代码里面如何实现这种同时进行的不同事件呢?这就是接下来要讲的python多线程

多线程threading

1.Python通过两个标准库thread和threading提供对线程的支持。thread提供了低级别的、原始的线程以及一个简单的锁.Threading模块封装了一些常用的方法,初学者直接学这个模块就行了。

2.Python中使用线程有两种方式:函数或者用类来包装线程对象

3.threading.Thread里面几个参数介绍:

class Thread(_Verbose)      __init__(self, group=None, target=None, name=None, args=(), kwargs=None, verbose=None)              *group*:group参数必须为空,参数group是预留的,用于将来扩展;   参数args和kwargs分别表示调用target时的参数列表和关键字参数。              *target*: 参数target是一个可调用对象(也称为活动[activity]),在线程启动后执行              *name*: 参数name是线程的名字。默认值为“Thread-N“,N是一个数字。             *args*:传递给线程函数target的参数,他必须是个tuple类型.              *kwargs*:kwargs表示关键字参数。字典类型 {}.

函数式

1.先看个简单案例,这种是执行函数,函数不带参数的

# coding:utf-8import threadingimport timedef chi():    print("%s 吃着火锅开始:" % time.ctime())    time.sleep(1)    print("%s 吃着火锅:涮羊肉" % time.ctime())    time.sleep(1)    print("%s 吃着火锅:涮牛肉" % time.ctime())    time.sleep(1)    print("%s 吃着火锅:贡丸" % time.ctime())    time.sleep(1)    print("%s 吃火锅结束!" % time.ctime())def ting():    print("%s 哼着小曲1!" % time.ctime())    time.sleep(2)    print("%s 哼着小曲2!" % time.ctime())    time.sleep(2)    print("%s 哼着小曲3!" % time.ctime())    time.sleep(2)    print("%s 哼着小曲4!" % time.ctime())    time.sleep(2)    print("%s 哼着小曲5!" % time.ctime())    time.sleep(2)# 创建线程数组threads = []# 创建线程t1,并添加到线程数组t1 = threading.Thread(target=chi)threads.append(t1)# 创建线程t2,并添加到线程数组t2 = threading.Thread(target=ting)threads.append(t2)if __name__ == '__main__':    # 启动线程    for t in threads:        t.start()

运行结果:

Thu Jan 11 16:35:50 2018 吃着火锅开始:
Thu Jan 11 16:35:50 2018 哼着小曲1!
Thu Jan 11 16:35:51 2018 吃着火锅:涮羊肉
Thu Jan 11 16:35:52 2018 哼着小曲2!Thu Jan 11 16:35:52 2018 吃着火锅:涮牛肉

Thu Jan 11 16:35:53 2018 吃着火锅:贡丸

Thu Jan 11 16:35:54 2018 哼着小曲3!Thu Jan 11 16:35:54 2018 吃火锅结束!

Thu Jan 11 16:35:56 2018 哼着小曲4!

Thu Jan 11 16:35:58 2018 哼着小曲5!

2.带参数的用args传元组类型(参数最后多加一个逗号“,”要不然会报错)

# coding:utf-8import threadingimport timedef chi(threadName,name):    print("%s 吃着%s开始:" % (time.ctime(),threadName))    print("%s 吃着火锅:涮羊肉" % time.ctime())    time.sleep(1)    time.sleep(1)    print("%s 吃着火锅:涮牛肉" % time.ctime())    time.sleep(1)    print("%s 吃着火锅:贡丸" % time.ctime())    time.sleep(1)    print("%s 吃着%s结束--" % (time.ctime(),threadName))    print("%s 运行结束!"%name)def ting(threadName):    print("%s 哼着%s1!" % (time.ctime(),threadName))    time.sleep(2)    print("%s 哼着小曲2!" % time.ctime())    time.sleep(2)    print("%s 哼着小曲3!" % time.ctime())    time.sleep(2)    print("%s 哼着小曲4!" % time.ctime())    time.sleep(2)    print("%s 哼着小曲5!" % time.ctime())    time.sleep(2)# 创建线程数组threads = []# 创建线程t1,并添加到线程数组# t1 = threading.Thread(target=chi, args=("火锅","吃火锅",))# 传kwargs参数t1 = threading.Thread(target=chi, kwargs={"threadName":"火锅","name":"吃火锅"})threads.append(t1)# 创建线程t2,并添加到线程数组t2 = threading.Thread(target=ting,args=("小曲",))threads.append(t2)if __name__ == '__main__':    # 启动线程    for t in threads:        t.start()

3.或者用kwargs传字典{}类型

# 创建线程t1,并添加到线程数组# t1 = threading.Thread(target=chi, args=("火锅","吃火锅",))# 传kwargs参数t1 = threading.Thread(target=chi, kwargs={"threadName":"火锅","name":"吃火锅"})

封装类和方法的调用下篇介绍

python自动化交流 QQ群:779429633

转载地址:http://ydmbz.baihongyu.com/

你可能感兴趣的文章
mysqlreport分析工具详解
查看>>
MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
查看>>
Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
查看>>
mysql_real_connect 参数注意
查看>>
mysql_secure_installation初始化数据库报Access denied
查看>>
MySQL_西安11月销售昨日未上架的产品_20161212
查看>>
Mysql——深入浅出InnoDB底层原理
查看>>
MySQL“被动”性能优化汇总
查看>>
MySQL、HBase 和 Elasticsearch:特点与区别详解
查看>>
MySQL、Redis高频面试题汇总
查看>>
MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
查看>>
mysql一个字段为空时使用另一个字段排序
查看>>
MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
查看>>
MYSQL一直显示正在启动
查看>>
MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
查看>>
MySQL万字总结!超详细!
查看>>
Mysql下载以及安装(新手入门,超详细)
查看>>
MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
查看>>
MySQL不同字符集及排序规则详解:业务场景下的最佳选
查看>>
Mysql不同官方版本对比
查看>>