前言

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. AngularJS $timeout和 $interval ,定时器手机验证码倒计时

    $interval是 window.setInterval的Angular包装形式.$interval指每次延迟时间后执行响应的函数(也可以说:每次执行函数的间隔时间).$interval多数用于计时 ...

  2. 3D效果

    3D transform:rotate3d(x,y,z,a) (0.6,1,0.5,45deg) transform-origin 允许改变转换元素的位置,(中心点) transform-style ...

  3. 向已有的table中插入数据

    table: <table id="seleted-table" class="table table-bordered table-hover" sty ...

  4. [作业] Python入门基础--用户登陆

    让用户输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定登陆 #__author:Mifen #date: 2018/11/28 import time #自定义本地用户名和密码 user_nam ...

  5. 欢迎来到GIS思考者的博客www.gisthinker.com

    我是一名GIS爱好者,这是我的个人博客,欢迎点击: GIS思考者:www.gisthinker.com

  6. 【7】.net WebAPI Owin OAuth 2.0 密码模式验证实例

    1.OAuth密码模式 2.在VS中创建WebAPI项目 在nuget中安装: Microsoft.AspNet.WebApi.Owin Microsoft.Owin.Host.SystemWeb 这 ...

  7. Winform截图小程序

    今天闲时做的一个Demo,做得并不好,只是实现了最基本的截图功能 主要的思路就是 先打开一个主窗体,点击"截图按钮" 会出现一个半透明的小窗体(可以拉伸放大缩小) 然后利用Grap ...

  8. java EE 新手入门了解

    郑重申明:本文转载至https://blog.csdn.net/Neuf_Soleil/article/details/80962686,在此深表感谢! 为什么选择java? 想必有很多初学者会像我一 ...

  9. 基于.Net下整合FastReport,实现条码标签批量打印

    一. 准备工作 1. 点击此下载支持.Net4.0的 FastReport ,安装后并破解 2. VS2012 工具箱中,新建选项卡,添加 %安装目录%\Framework 4.0\FastRepor ...

  10. Spring与Web

    一.定义页面及Servlet 在jsp页面加入以下,避免乱码 <meta charset="utf-8"> <body> <form action=& ...