python多线程问题及生产者消费者示例

多线程能干什么:

生产者消费者问题:
一直生产,一直消费,中间有阀值,避免供求关系不平衡,导致出现问题。
#线程安全问题,要是线程同时来,听谁的
#锁:一种数据结构 队列:先进线出 栈:先进后出

1.解耦(让程序各模块之间的关联性降到最低)
2.支持并发:
    生产者消费者是两个独立的并发体,他们之间是用缓冲区作为桥梁连接,只需要从缓冲区里拿数据即可,这样就不会因为
    彼此速度而发生阻塞。
3.支持忙闲不均
    如果制造数据的速度时快时慢,缓冲区的好处就体现出来了,当数据制造快的时候,消费者来不及处理,未处理的数据可
    以暂时存在缓冲区中,等生产者的速度慢下来,消费者再慢慢处理.

一个简单的多任务问题,单线程导致效率低下:

from time import ctime,sleep


def music(a):
    for i in range(2):
        print("I was listening to %s.%s" %(a,ctime()))
        sleep(2)

def movie(b):
    for i in range(2):
        print("I was watching to %s.%s" %(b,ctime()))
        sleep(2)

music("告白气球")
movie("泰坦尼克号")
print("all over %s" %ctime())

在这里插入图片描述
将多任务问题用多线程解决,提高效率,解决了多任务等待的问题:

from threading import Thread
from time import ctime,sleep


def music(a):
    for i in range(2):
        print("I was listening to %s.%s" %(a,ctime()))
        sleep(2)


def movie(b):
    for i in range(2):
        print("I was watching to %s.%s" %(b,ctime()))
        sleep(5)

# 调用多线程解决多任务问题
t1 = Thread(target=music,args=("a"))
t1.start()
t2 = Thread(target=movie,args=("b"))
t2.start()

在这里插入图片描述
线程的定义:

线程是操作系统能够进行运算调度的最小单位。它被包括在进程之中,是进程的实际运作单位。一个进程可以并发多个线程,
每条线程并行执行不同的任务(线程是进程的一个实体,是被系统独立调度和分派的基本单元)
每一个进程启动时都会最先产生一个线程,即主线程,然后主线程会再创建其他的子线程。

通常,我们写服务器处理模型的程序时,有以下几种模型:

(1)每收到一个请求,创建一个新的进程,来处理该请求;
(2)每收到一个请求,创建一个新的线程,来处理该请求;
(3)每收到一个请求,放入一个事件列表,让主进程通过非阻塞I/O方式来处理请求;
上面的几种方式,各有千秋,
第(1)中方法,由于创建新的进程的开销比较大,所以,会导致服务器性能比较差,但实现比较简单。
第(2)种方式,由于要涉及到线程的同步,有可能会面临死锁等问题。
第(3)种方式,在写应用程序代码时,逻辑比前面两种都复杂。
综合考虑各方面因素,一般普遍认为第(3)种方式是大多数网络服务器采用的方式

线程的缺点:

在UI编程中,常常要对鼠标点击进行相应&
  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值