1.多线程执行带有参数的任务

以元组形式传参

以字典方式进行传参       (字典的key值和参数名要一致)

2.线程的注意点

线程之间执行是无序的

主线程会等待所有的子线程执行结束再结束

如果要主线程不等待子线程结束再结束,可以把子线程设置为守护线程, 主线程退出后子线程直接销毁。

线程之间共享全局变量

如果想让  添加数据的子线程执行完之后再执行读取数据的代码  join()方法,线程等待,


1.多线程执行带有参数的任务

 Thread 类执行任务并给任务传参数有两种方式:

  • args:     指定将来调用 函数的时候   传递什么数据过去
                      args参数指定的一定是一个元组类型
  • kwargs 表示以字典方式给执行任务传参

  • 以元组形式传参

import threading
import time
g_nums = [1,2]def test1(temp):temp.append(33)print("-----in test1 temp=%s-----"% str(temp))def test2(temp):print("-----in test2 temp=%s-----"% str(temp))def main():t1 = threading.Thread(target=test1,args=(g_nums,))  # 加上要传递的参数,元组类型t2 = threading.Thread(target=test2, args=(g_nums,))  # args 元组类型t1.start()time.sleep(1)t2.start()time.sleep(1)print("-----in main temp=%s-----"% str(g_nums))if __name__ == '__main__':main()

结果:

-----in test1 temp=[1, 2, 33]-----
-----in test2 temp=[1, 2, 33]-----
-----in main temp=[1, 2, 33]-----

  • 以字典方式进行传参       (字典的key值和参数名要一致)

import threadingdef eat(name, number):print("eating :%s number :%d" % (name, number))def watch(name, type):print("watch : %s type:%s" % (name, type))if __name__ == '__main__':eat_thread = threading.Thread(target=eat, kwargs={"name": "爆米花", "number": 1})watch_thread = threading.Thread(target=watch, kwargs={"name": "电影", "type": "科幻"})eat_thread.start()watch_thread.start()

运行结果:

eating :爆米花 number :1
watch : 电影 type:科幻

2.线程的注意点

  1. 线程之间执行是无序的
  2. 主线程会等待所有的子线程执行结束再结束
  3. 线程之间共享全局变量
  4. 线程之间共享全局变量数据出现错误问题
  • 线程之间执行是无序的

import threading
import timedef task():time.sleep(0.2)# 获取当前线程print(threading.current_thread())if __name__ == '__main__':for i in range(20):# 每循环一次创建一个子线程sub_thread = threading.Thread(target=task)# 启动子线程sub_thread.start()

通过下方的运行结果可以看出,   线程之间的执行确实是无序的,具体哪个线程执行是由cpu调度决定的

  • 主线程会等待所有的子线程执行结束再结束

import threading
import timedef task():while True:print("子线程任务执行中***")time.sleep(0.2)if __name__ == '__main__':# 创建子线程sub_thread = threading.Thread(target=task)sub_thread.start()# 主线程延迟执行1秒time.sleep(1)print("主线程over")

运行结果:  子线程一直会执行,主线程会等待子线程结束再结束

  • 如果要主线程不等待子线程结束再结束,可以把子线程设置为守护线程, 主线程退出后子线程直接销毁。

第一种方式:  daemon=True

    # daemon=True 表示创建的子线程守护主线程,主线程退出子线程直接销毁sub_thread = threading.Thread(target=task, daemon=True)

第二种方式:setDaemon(True)

    sub_thread = threading.Thread(target=task)sub_thread.setDaemon(True)sub_thread.start()
  • 线程之间共享全局变量

import threading# 定义全局变量
g_list = []# 添加数据
def add_data():for i in range(10):# 每循环一次就把数据添加到全局变量中g_list.append(i)print("add: ", i)# 读取数据
def read_data():print("read:", g_list)if __name__ == '__main__':# 创建子线程add_thread = threading.Thread(target=add_data)read_thread = threading.Thread(target=read_data)add_thread.start()read_thread.start()

运行结果:  可以共同访问一个变量

  • 如果想让  添加数据的子线程执行完之后再执行读取数据的代码  join()方法,线程等待

  join()方法,线程等待(线程同步的一种方式,保证同一时刻只能有一个线程去操作全局变量,同步就是按照预先的先后次序进行运行,比如现实生活中的对讲机,你说完,我再说),让第一个线程执行完之后再执行第二个线程,保证数据不会有问题

    add_thread.start()add_thread.join()read_thread.start()

Python多任务(多线程执行带有参数的任务,利用threading创建线程时传入参数--args参数和kwargs参数)相关推荐

  1. python 的多线程执行速度

    python 的多线程有点鸡肋,适用场景有局限,单位时间多个核只能跑一个线程. 有泳池一个,四个泵,但只有一个人,一人只能开启管理着其中一个,所以四个泵没什么用.但是,如果泵的工作时间与冷却恢复时间是 ...

  2. python 线程锁_Python3多线程执行任务含线程同步锁

    Python启动多线程执行任务,用线程锁实现同步分配任务,最后等待所有线程执行完毕#python3多线程演示 import threading import random import time to ...

  3. spring 定时任务 多任务并行执行,多任务多线程 单任务单线程执行实现细节

    前提:spring 定时任务,默认是多任务单线程执行,也就是串行执行的 当前需求: 1. 多任务多线程执行(不同的定时任务并行执行) 2.同一个定时任务单线程执行(保证一个定时任务A在执行完成前,A的 ...

  4. 【Python】多线程及threading模块介绍

    ​目录 1. 多线程简单介绍 2. threading模块介绍 2.1 threading模块常用方法 2.2 Thread类使用 2.2.1 使用构造函数传递可调用对象的方法创建线程 2.2.2 继 ...

  5. python + wget多线程下载

    python + wget多线程下载 读取链接 下载函数 MyThread 并行下载 代码 由于有个项目需要下载大量数据,数据大多是每个100MB左右,所以我想使用python + wget多线程下载 ...

  6. Python多任务教程

    一.并发和并行 多任务:一定时间段内,充分利用cpu资源,同时去执行多个任务 并发: 快速交替的 去执行多任务 并行: 真正同时的 去执行多任务 ,就是同时进行 二.多进程 1.多进程入门 知识点: ...

  7. python多任务编程_python线程的多任务编程

    多任务 多任务介绍 对于人来说,一边听歌,一边跳舞就是多任务. 对于电脑,简单的说,同一时间执行多个程序处理数据叫做多任务 多任务理解 单核CPU 单核cpu在处理多任务的时候是根据时间片轮转的方式进 ...

  8. 【script】python实现多线程将doc、docx转pdf,doc转docx

    摘要 本文讲述通过python实现多线程将当前目录下的 .doc文档转.pdf..docx文档转.pdf,以及.doc文档转.docx(在python中,如需对word文档进行读写,只能读写docx格 ...

  9. python多任务,线程详解

    python 多任务 多线程 python的thread模块是⽐较底层的模块,python的threading 模块是对thread做了⼀些包装的,可以更加⽅便的被使⽤ 调用 1 直接调用 # –*– ...

最新文章

  1. php 修改数据库表的字段的值
  2. 如何轻松将上亿的数据玩弄于股掌之中?
  3. 那些年踩过的Java异常,简直了!
  4. html文件中包含相关的d3.js文件,D3.js进阶系列之CSV表格文件的读取详解
  5. mysql的主从,主主,半同步
  6. 面试的那些事(收藏类)
  7. 雷林鹏分享:PHP 表单验证
  8. DevExpress WPF v19.1新版亮点:PDF Viewer等控件新功能
  9. LINUX剪贴板调用接口获取数据
  10. 管理感悟:产品功能比别人差,所以不能用?
  11. 一年级学python_Python这个黑科技,后悔没有早点学起来
  12. 【从零学习openCV】IOS7人脸识别实战
  13. Java实现的各种排序算法
  14. 基于jsp、ssm网上购物商城系统(带论文)
  15. 请问下面这段代码哪里有错? private static final String s=
  16. Java中的字符串及其中的常用方法
  17. 需要来自administrator的权限才能删除
  18. [总结]视频质量评价技术零基础学习方法
  19. 用python,重温小时候猜数字大小游戏
  20. 数据库 vs 数据仓库

热门文章

  1. SpringMVC-拦截器快速入门
  2. oracle获取分组后的统计信息,并只要前五条
  3. 牛客题霸 NC2 重排链表
  4. ASP防止SQL注入-代码片段
  5. Dandan's lunch
  6. 对二维数组自定义排序、Treemap自定义排序、priorityqueue自定义排序
  7. 【Window / 浏览器】 常用 快捷键 整理
  8. oauth2.0 原理
  9. 自定义Xcode代码模板:Code Snippet
  10. ipad/iphone启动界面Default.png