线程与协程

本文深入探讨了线程的创建、共享全局变量、同步、进程间通信及死锁问题,并通过实例讲解了协程的生成器、greenlet和gevent实现,旨在充分利用CPU资源,提高程序效率。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本文主要介绍线程和协程


提示:以下是本篇文章正文内容,下面案例可供参考

一、线程的创建和使用?

在这里插入图片描述

在这里插入图片描述

#线程
'''
  考虑? 创建线程? 如何使用线程?
   t=threading.Thread(target=download,name='aa',args=(1,))
   t.start()
   线程:
    新建 就绪 运行 阻塞 结束

'''

import  threading
from time import  sleep
#进程: Process
#线程: Thread

def download(n):
    images=['girl.jpg','boy.jpg','man.jpg']
    for image in images:
        print('正在下载:',image)
        sleep(n)
        print("下载{}成功".format(image))
def listenMusic():
    musics=['大碗宽面','土耳其冰淇淋','烤面筋','超级棒棒糖']
    for musics in musics:
        print('正在听{}'.format(musics))
        sleep(0.5)
if __name__ == '__main__':
    # 线程对象
    t=threading.Thread(target=download,name='aa',args=(1,))
    t.start()
    t = threading.Thread(target=listenMusic, name='aa')
    t.start()
    # n=1
    # while  True:
    #     print(n)
    #     sleep(1.5)
    #     n+=1

二、线程共享全局变量

import threading
from time import  sleep
'''
线程是可以共享全局变量的
GIL 全局解释器锁
'''
ticket= 1000
def run1():
    global  ticket
    for i in range(100):
        sleep(0.1)
        ticket-=1

def run2():
    global  ticket
    for i in range(100):
        ticket-=1
if __name__ =='__main__':
    #创建线程
    th1= threading.Thread(target=run1,name='th1')
    th2 = threading.Thread(target=run2,name='th2')
    th3 = threading.Thread(target=run1, name='th3')
    th4 = threading.Thread(target=run1, name='th4')

    #启动
    th1.start()
    th2.start()
    th3.start()
    th4.start()

    th1.join()
    th2.join()
    th3.join()
    th4.join()


    print('ticket:',ticket)

三 线程的同步:

在这里插入图片描述

n=0
import threading
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值