前言

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之函数式的更多相关文章

  1. python笔记9-多线程Threading之阻塞(join)和守护线程(setDaemon)

    python笔记9-多线程Threading之阻塞(join)和守护线程(setDaemon) 前言 今天小编YOYO请xiaoming和xiaowang吃火锅,吃完火锅的时候会有以下三种场景: - ...

  2. python笔记12-python多线程之事件(Event)

    前言 小伙伴a,b,c围着吃火锅,当菜上齐了,请客的主人说:开吃!,于是小伙伴一起动筷子,这种场景如何实现 Event(事件) Event(事件):事件处理的机制:全局定义了一个内置标志Flag,如果 ...

  3. Python核心编程——多线程threading和队列

    线程与进程类似不过他们是在同一个进程下执行的,并共享相同的上下文.可以将他们认为是在一个主进程或“主线程”中运行的迷你进程. 线程包括开始.执行顺序和结束三部分.它有一个指令指针,用于记录当前运行的上 ...

  4. Python模块学习------ 多线程threading(2)

    一.避免使用thread模块,使用threading模块的原因: 1. 更高级别的threading模块更为先进,对线程的支持更加完善.而且使用thread模块的属性有可能会与threading 出现 ...

  5. Python模块学习------ 多线程threading(1)

    # Method 1: 创建一个Thread实例,传给它一个函数:import threading from time import sleep, ctime loops = [4,2] def lo ...

  6. python笔记8-多线程threading之封装式

    执行函数 1.先写一个执行函数,用来实现做某件事情,不同的人吃火锅用一个参数people代替. # coding=utf-8 import threading import time def chiH ...

  7. python学习笔记之使用threading模块实现多线程(转)

    综述 Python这门解释性语言也有专门的线程模型,Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,但暂时无法利用多处理器的优势 ...

  8. Python笔记:threading(多线程操作)

    Python的线程操作在旧版本中使用的是thread模块,在Python27和Python3中引入了threading模块,同时thread模块在Python3中改名为_thread模块,thread ...

  9. python进阶笔记 thread 和 threading模块学习

    Python通过两个标准库thread和threading提供对线程的支持.thread提供了低级别的.原始的线程以及一个简单的锁.threading基于Java的线程模型设计.锁(Lock)和条件变 ...

随机推荐

  1. 推荐几个好用的maven仓库镜像站

    1.阿里云的镜像站(速度很快) <mirror> <id>nexus-aliyun</id> <name>Nexus aliyun</name&g ...

  2. android Application类的详细介绍(转)

    在代码中经常看到application这个类,一直不知道这个是干什么用的,今天刚好有点时间,所以进行了详细的学习. 一.先对它的整体概念解释: 在android源码中对他的描述是; * Base cl ...

  3. 使用vue的v-model自定义 checkbox组件

    <template id='c'> <input type="checkbox" :checked="checked" v-on:change ...

  4. vue实现非路由跳转以及数据传递

    定义一个父组件 <template> <v-layout> <v-card contextual-style="dark" v-if="sh ...

  5. python爬虫实战(七)--------伯乐在线文章(模版)

    相关代码已经修改调试成功----2017-4-21 一.说明 1.目标网址:伯乐在线 2.实现:如图字段的爬取 3.数据:存放在百度网盘,有需要的可以拿取 链接:http://pan.baidu.co ...

  6. EF Code-First数据迁移

    Code-First数据迁移  首先要通过NuGet将EF升级至最新版本. 新建MVC 4项目MvcMigrationDemo 添加数据模型 Person 和 Department,定义如下: usi ...

  7. Java中HashSet的解读

    一. HashSet源代码 HashSet 的实现   对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,因此 HashSet 的 ...

  8. 记一次吐血的暴力模拟qaq 【多项式输出】

    题目描述 一元 n 次多项式可用如下的表达式表示: 其中,aixi称为 i 次项,ai 称为 i 次项的系数.给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式: 1. 多项式中 ...

  9. 安装vmware player

    一.简介 什么是虚拟机? 虚拟机是通过软件来模拟一个完整的计算机系统.简单来说,你可以在当前系统中通过虚拟机软件运行另外一个系统,并且与当前系统隔离. 什么是vmware? vmware(virtua ...

  10. 使用webClient实现图片同步,异步下载

    WebClient.DownloadFile 方法 将具有指定 URI 的资源下载到本地文件. 命名空间:System.Net 程序集:System(在 system.dll 中) 同步实现参考代码: ...