多线程threading

1.Thread创建线程:

上代码:

#!/usr/bin/env python3

import threading
import time def A():
t_name = threading.current_thread().name #获取线程名称
for i in range(5):
print(i)
time.sleep(1)
print(t_name) t1 = threading.Thread(target = A) #创建线程对象
t1.start() #启动线程
print(threading.current_thread().name)

输出结果:

0
MainThread
1
2
3
4
Thread-1
  • 一个进程最少且必须有一个线程,是主线程:MainThread,创建出来的是子线程,用Thread-1,Thread-2···命名
  • 主线程会等待子线程执行完毕之后才会结束

2.互斥锁(线程锁、全局变量锁):

  • 当多个线程同时对一个全局变量进行修改时会出现争抢,导致可能抢到的值是相同的,造成一些线程做了无用功。

上代码:

#!/usr/bin/env python3

import threading
import time num = 0 def A():
global num
for i in range(1000000):
num += 1 def B():
global num
for i in range(1000000):
num += 1 t1 = threading.Thread(target = A)
t1.start()
t2 = threading.Thread(target = B)
t2.start() t1.join() #等待线程执行完成后在往下执行
t2.join()
print(num)

执行结果:

1924932

  • 按理说结果应该是2000000才对,可是由于线程之间的对全局变量的争抢,导致了值得不稳定。所以要对全局变量每次操作时进行加锁,避免其混乱。

改进版:

#!/usr/bin/env python3

import threading
import time num = 0 def A():
global num
for i in range(1000000):
lock.acquire() #加锁
num += 1
lock.release() #解锁 def B():
global num
for i in range(1000000):
lock.acquire() #加锁
num += 1
lock.release() #解锁 lock = threading.Lock() #创建锁
t1 = threading.Thread(target = A)
t1.start()
t2 = threading.Thread(target = B)
t2.start() t1.join() #等待线程执行完成后在往下执行
t2.join()
print(num)

执行结果:

2000000

3.进程与线程的区别

  • 每个程序都有至少一个进程,每个进程都有至少一个线程。
  • 线程依附于进程,不能独立存在
  • 进程与进程直接的内存资源不能共享,只能通过特殊渠道才能通信,如Queue。但是同一进程内的所有线程是可以资源共享的。
  • 进程消耗的资源多,线程消耗资源少。

python的多线程threading的更多相关文章

  1. Python初学——多线程Threading

    接着上篇继续跟着沫凡小哥学Python啦 1.1 什么是多线程 Threading 多线程可简单理解为同时执行多个任务. 多进程和多线程都可以执行多个任务,线程是进程的一部分.线程的特点是线程之间可以 ...

  2. Python:多线程threading模块

    目录 Thread对象 Lock对象 local对象 Thread对象: 多任务可以由多进程完成,也可以由一个进程内的多线程完成.进程是由至少1个线程组成的. threading模块在较低级的模块 _ ...

  3. python之多线程 threading.Lock() 和 threading.RLock()

    0.目录 2. threading.Lock() 的必要性3.观察block4.threading.RLock() 的应用场景 1.参考 Thread Synchronization Mechanis ...

  4. Python学习【第26篇】:Python系列- 多线程(threading)

    线程的调用方式:threanding模块 import threading import time def sayhi(num): #定义每个线程要运行的函数 print("running ...

  5. Python的多线程(threading)与多进程(multiprocessing )

    进程:程序的一次执行(程序载入内存,系统分配资源运行).每个进程有自己的内存空间,数据栈等,进程之间可以进行通讯,但是不能共享信息. 线程:所有的线程运行在同一个进程中,共享相同的运行环境.每个独立的 ...

  6. python多线程threading

    本文通过 4个example 介绍python中多线程package —— threading的常用用法, 包括调用多线程, 同步队列类Queue, Ctrl+c结束多线程. example1. 调用 ...

  7. Python:使用threading模块实现多线程编程

    转:http://blog.csdn.net/bravezhe/article/details/8585437 Python:使用threading模块实现多线程编程一[综述] Python这门解释性 ...

  8. python多线程threading.Lock锁用法实例

    本文实例讲述了python多线程threading.Lock锁的用法实例,分享给大家供大家参考.具体分析如下: python的锁可以独立提取出来 mutex = threading.Lock() #锁 ...

  9. 基于Python的多线程模块Threading小结

    步入正题前,先准备下基本知识,线程与进程的概念. 相信作为一个测试人员,如果从理论概念上来说其两者的概念或者区别,估计只会一脸蒙蔽,这里就举个例子来说明下其中的相关概念. 平安夜刚过,你是吃到了苹果还 ...

随机推荐

  1. powerdesigner中物理模型与sql脚本的以及与数据库的连接设置

    使用JDBC连接失败的解决方案: http://blog.csdn.net/t37240/article/details/51595097 使用powerdesigner工具我们可以方便的根据需求分析 ...

  2. OpenCV---轮廓发现

    推文:OpenCV-Python教程(11.轮廓检测) 轮廓发现 是基于图像边缘提取的基础,寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓的发现 相关API findContours 发现轮 ...

  3. 在GitHub搭建个人博客 地址: https://douzujun.github.io/

    搭建博客地址:https://douzujun.github.io/ 博客模板:https://github.com/douzujun/douzujun.github.io 显示效果:

  4. uoj311 【UNR #2】积劳成疾

    传送门:http://uoj.ac/problem/311 [题解] 这题的期望dp好神奇啊(可能是我太菜了) 由于每个位置都完全一样,所以我们设$f_{i,j}$表示审了连续$i$个位置,最大值不超 ...

  5. 【BZOJ】1497: [NOI2006]最大获利 最大权闭合子图或最小割

    [题意]给定n个点,点权为pi.m条边,边权为ci.选择一个点集的收益是在[点集中的边权和]-[点集点权和],求最大获利.n<=5000,m<=50000,0<=ci,pi<= ...

  6. 数组A - 财务管理

    Larry graduated this year and finally has a job. He's making a lot of money, but somehow never seems ...

  7. MQTT协议及推送服务(二)

    MQTT简介 MQTT全称叫做Message Queuing Telemetry Transport,意为消息队列遥测传输,是IBM开发的一个即时通讯协议.由于其维护一个长连接以轻量级低消耗著称,所以 ...

  8. CodeForces 990C

    Description A bracket sequence is a string containing only characters "(" and ")" ...

  9. 天梯赛 L2-012 关于堆的判断 (二叉树)

    将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: "x is the root":x是根结点: "x and y ar ...

  10. [转载]FFmpeg完美入门[1] - FFmpeg介绍及安装

    1 FFmpeg简介 FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视 频的完整解决方案.它包含了非常先 ...