pyhton_线程

import threading, time


def download(s):
    photo = ['man.jpg', 'woman.jpg', 'child.jpg', 'dog.jpg', 'cat.jpg']
    for picture in photo:
        time.sleep(s)
        print('下载{}成功'.format(picture))


def listenMusic(s):
    music = ['1.mp3', '2.mp3', '3.mp3']
    for listen in music:
        time.sleep(s)
        print('正在听{}'.format(listen))


if __name__ == '__main__':
    # 线程对象
    t1 = threading.Thread(target=download, name='下载照片', args=(1,))
    t1.start()

    t2 = threading.Thread(target=listenMusic, name='听歌',args=(1,))
    t2.start()

    n = 1
    while True:
        print(n)
        time.sleep(1.5)
        n += 1
--------------------------------------
1
正在听1.mp3下载man.jpg成功

2
正在听2.mp3
下载woman.jpg成功
下载child.jpg成功
正在听3.mp3
3
下载dog.jpg成功
4
下载cat.jpg成功
5
6
7

import threading

money = 1000

def run1():
    global money
    for i in range(100):
        money -= 1

def run2():
    global money
    for i in range(100):
        money -= 1


if __name__ == '__main__':
    t1 = threading.Thread(target=run1,name='测试1')
    t2 = threading.Thread(target=run2, name='测试2')

    t1.start()
    t2.start()

    #保证t1,t2 均启动完在插队(插队在print(money)前面)
    t1.join()
    t2.join()
    # 由结果可知,对于全局变量,线程可共享
    print(money)
-------------------------------------------
800

多线程的优势在于可以同时运行多个任务,(python伪多线程)

但是当线程需要数据共享时,可能存在数据不同步的问题。

为了避免这种情况,引入了锁的概念

lock = threading.Lock()

lock = threading.acquire()

        ....

lock = threading.release()

只要不释放锁,其他线程都无法进入运行状态

import threading,time

list = [0] * 10

lock = threading.Lock()

def run1():
    lock.acquire()# 请求锁,如果锁被占用,则等待
    for i in range(len(list)):
        time.sleep(0.5)
        list[i] += 1
    lock.release() # 释放锁


def run2():
    lock.acquire()  # 请求锁,如果锁被占用,则等待
    for i in range(len(list)):
        time.sleep(0.5)
        print('这是run2,当前i的值为:',i)
    lock.release()  # 释放锁


if __name__ == '__main__':
    t1 = threading.Thread(target=run1)
    t2 = threading.Thread(target=run2)

    t1.start()
    t2.start()
==============================================
这是run2,当前i的值为: 0
这是run2,当前i的值为: 1
这是run2,当前i的值为: 2
这是run2,当前i的值为: 3
这是run2,当前i的值为: 4
这是run2,当前i的值为: 5
这是run2,当前i的值为: 6
这是run2,当前i的值为: 7
这是run2,当前i的值为: 8
这是run2,当前i的值为: 9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值