python笔记7-多线程threading之函数式
前言
1.python环境3.6
2.threading模块系统自带
单线程
1.平常写的代码都是按顺序挨个执行的,就好比吃火锅和哼小曲这两个行为事件,定义成两个函数,执行的时候,是先吃火锅再哼小曲,这种就是单线程的行为。
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-8
import threading
import time
def 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()
运行结果:
2.带参数的用args传元组类型(参数最后多加一个逗号“,”要不然会报错)
# coding:utf-8
import threading
import time
def 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笔记7-多线程threading之函数式的更多相关文章
- python笔记9-多线程Threading之阻塞(join)和守护线程(setDaemon)
python笔记9-多线程Threading之阻塞(join)和守护线程(setDaemon) 前言 今天小编YOYO请xiaoming和xiaowang吃火锅,吃完火锅的时候会有以下三种场景: - ...
- python笔记12-python多线程之事件(Event)
前言 小伙伴a,b,c围着吃火锅,当菜上齐了,请客的主人说:开吃!,于是小伙伴一起动筷子,这种场景如何实现 Event(事件) Event(事件):事件处理的机制:全局定义了一个内置标志Flag,如果 ...
- Python核心编程——多线程threading和队列
线程与进程类似不过他们是在同一个进程下执行的,并共享相同的上下文.可以将他们认为是在一个主进程或“主线程”中运行的迷你进程. 线程包括开始.执行顺序和结束三部分.它有一个指令指针,用于记录当前运行的上 ...
- Python模块学习------ 多线程threading(2)
一.避免使用thread模块,使用threading模块的原因: 1. 更高级别的threading模块更为先进,对线程的支持更加完善.而且使用thread模块的属性有可能会与threading 出现 ...
- Python模块学习------ 多线程threading(1)
# Method 1: 创建一个Thread实例,传给它一个函数:import threading from time import sleep, ctime loops = [4,2] def lo ...
- python笔记8-多线程threading之封装式
执行函数 1.先写一个执行函数,用来实现做某件事情,不同的人吃火锅用一个参数people代替. # coding=utf-8 import threading import time def chiH ...
- python学习笔记之使用threading模块实现多线程(转)
综述 Python这门解释性语言也有专门的线程模型,Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,但暂时无法利用多处理器的优势 ...
- Python笔记:threading(多线程操作)
Python的线程操作在旧版本中使用的是thread模块,在Python27和Python3中引入了threading模块,同时thread模块在Python3中改名为_thread模块,thread ...
- python进阶笔记 thread 和 threading模块学习
Python通过两个标准库thread和threading提供对线程的支持.thread提供了低级别的.原始的线程以及一个简单的锁.threading基于Java的线程模型设计.锁(Lock)和条件变 ...
随机推荐
- 重签名android测试包
我的一个例子:jarsigner -digestalgSHA1 -sigalg MD5withRSA -keystore C:\Users\sunyang\.android\debug.keystor ...
- digestmd5.c:4037:15: error: #elif with no expression
执行如下:sed -i.bak 's/#elif WITH_DES/#elif defined(WITH_DES)/' \ plugins/digestmd5.c
- git删除远程主机没有的tag
可以先删除所有本地tag,然后再拉取远程上的tag git tag -l | xargs git tag -d git fetch --tags 其他方法以及查询tag的命令请见:Remove loc ...
- Perl入门
Perl 是一门开源的脚本语言,由 Larry Wall 所创造,该语言以实用,快速开发为主要目标,与当前流行的面向对象结构化编程有些格格不入,但这并不妨碍 Perl 被广泛流传和使用,世界范围内围绕 ...
- i.mx6 Android5.1.1 vibrator系统服务流程
0. 概述 0.1 小结 下面来从APP一直分析到kernel的driver,因为vibrator是我所知的最简单的系统服务,分析过程过来,可以获取整个安卓服务的运行思路,把相关知识点都串联起来,又不 ...
- 二、多线程之Atomic包
一.简介 1.原子操作 我们在使用变量的时候,经常会出现资源竞争的情况,为了保证变量安全,我们就会对对应的方法添加"synchronized"同步锁来达到目的,以保证线程安全. 而 ...
- java核心技术-NIO
1.reactor(反应器)模式 使用单线程模拟多线程,提高资源利用率和程序的效率,增加系统吞吐量.下面例子比较形象的说明了什么是反应器模式: 一个老板经营一个饭店, 传统模式 - 来一个客人安排一个 ...
- Mac下使用sublime Text打开隐藏目录
我们用 sublime Text 打开时,默认是看到非隐藏的目录和文件,如下图: 这时候在这个节目,按下 command +shift + 句号 快捷键,会自动切换 隐藏状态的, 这时候就可以切换成下 ...
- yum只下载不安装dokcer
yum install --downloadonly --downloaddir=/test/ docker-io 有三个依赖包,如果不知道现后依赖顺序,可以强制安装 哦了
- For循环中由于ajax异步导致的问题解决(增加alert数据正常,去掉alert之后数据错误)
由于ajax异步请求的机制,for循环运行不会等内部ajax请求结束,而直接循环到最后.解决方法:将for循环里面的请求单独封装一个方法. 个人遇到的问题具体如下 下面这段代码,如果第5行studat ...