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)和条件变 ...
随机推荐
- Tomcat *的下载(绿色版和安装版都适用)
不多说,直接干货! 1.先下载tomcat,到http://tomcat.apache.org/ 2.注意:下载可以下载zip格式或exe格式的,其中zip格式的只要解压缩再配置下环境变量就可以使用了 ...
- Volley 源码解析(转)
项目:Volley,分析者:grumoon,校对者:Trinea 本文为 Android 开源项目源码解析 中 Volley 部分项目地址:Volley,分析的版本:35ce778,Demo 地址:V ...
- 安装Ubunutu音频视频库
sudo apt-get install ubuntu-restricted-extras
- Scrum 冲刺博客第七篇
一.当天站立式会议照片一张 二.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中 昨天已完成的工作 对排行榜的界面和功能进行初步设计 今天计划完成的工作 重新对界面进行美化 ...
- JDK1.7新特性(4):java语言动态性之反射API
直接通过一个代码示例来熟悉java中通过反射来对构造函数/域以及方法处理的相关API: package com.rampage.jdk7.chapter2; import java.lang.refl ...
- android应用执行需要root权限的shell命令
导入jar包:http://blog.csdn.net/zhw1551706847/article/details/77709142 RootTools:http://blog.csdn.net/st ...
- Golang build命令解析
go build,是我们非常常用的命令,它可以启动编译,把我们的包和相关的依赖编译成一个可执行的文件. usage: go build [-o output] [-i] [build flags] [ ...
- 最新的 Vue 相关开源项目库汇总
优秀的vue 开源后台管理开源系统框架 https://panjiachen.github.io/vue-element-admin-site/#/zh-cn/README UI组件 开发框架 实用库 ...
- Layui 好用的弹出框
layui的下载地址: http://www.layui.com/ 需要引用layui里面的css跟js layui自带jquery var $ = layui.$ 一个直接弹出另一个窗体的弹出框 w ...
- 五、线程本地ThreadLocal
一.线程私有 在多线程情况下,对于一个共享的数据可能会产生线程安全问题.最简单的解决办法就是堆访问共享数据的时候加锁,但我们知道加锁是很影响效率的,尤其是像数据库连接这样耗费资源较多的情况下,加锁就意 ...