Python day11_线程

作者: g_s_007 | 来源:发表于2018-05-20 22:38 被阅读0次

## 多线程共享全局变量 但是 因为线程执行是无须的 所以会出现资源竞争的问题 如下所示

这样会导致得到的数据不符合我们的期望。为了解决资源竞争的问题,线程中有两个解决办法:

1. 线程同步,第一个线程执行完毕后,第二个才开始,如上图25行

2. 利用互斥锁,如下代码:

import threading

num = 0

# 创建互斥锁

lock = threading.Lock()

# 任务1:循环1000000次每循环1次全局变量加1

def sum1():

    # 上锁

    lock.acquire()

    global num

    for i in range(1000000):

      num += 1

    print("sum1:", num)

    # 释放锁

    lock.release()

# 任务2:循环10000000次每循环1次全局变量加1

def sum2():

    # 上锁

    lock.acquire()

    global num

    for i in range(1000000):

        num += 1

    print("sum2:", num)

    # 释放锁

    lock.release()

if __name__ == '__main__':

    # 创建两个线程分别执行对应相加任务

    first_thread = threading.Thread(target=sum1)

    second_thread = threading.Thread(target=sum2)

    first_thread.start()

    second_thread.start()

    # 互斥锁: 保证同一时刻只有一个线程去执行代码,其它线程没有抢到锁会等待

    # 提示:加上互斥锁,哪个线程抢到锁我们决定不了,因为,线程执行是无序

    # 注意点: 线程同步和加上互斥锁把多任务瞬间该成单任务,性能会下降

# 注意:加上锁之后要及时释放锁,否则会出现死锁。

相关文章

  • Python day11_线程

    ## 多线程共享全局变量 但是 因为线程执行是无须的 所以会出现资源竞争的问题 如下所示 这样会导致得到的数据不符...

  • 11-9 多线程和多进程

    Python的GIL是针对进程还是线程?  是线程 Python多核cpu可以运行多线程吗? Python线程执行...

  • 5-线程(补充)

    Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了...

  • 多线程

    Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了...

  • Python 多线程 threading和multiproces

    Python 多线程 threading和multiprocessing模块 Python中常使用的线程模块 th...

  • day11_面向对象_多线程

    线程的定义 线程的意义 并行和并发的区别 并行:逻辑层面同时发生,指在一定时间内同时运行多个程序并发:物理层面同时...

  • Mr.Li--python-系统编程-线程

    线程 多线程--threading python的thread模块是比较底层的模块,python的threadin...

  • Python多线程编程——创建线程的两个方法

    之前的一篇文章:Python多线程编程——多线程基础介绍,主要介绍了线程的基本知识,以及使用Python创建线程的...

  • python系统编程2

    线程 1.1.1 多线程——threading python的thread模块是比较底层的模块,python的th...

  • python的线程模块和基本用法笔记

    python的线程模块和基本用法笔记 python线程中的模块:thread,threading,queue等程序...

网友评论

    本文标题:Python day11_线程

    本文链接:https://www.haomeiwen.com/subject/yjxzdftx.html