python子线程回调如何实现_线程回调,线程中的队列,事件,greenlet模块,gevent模块,自定义补丁, 单线程实现并发,协程...

本文介绍了Python中实现线程回调的方式,包括使用`add_done_callback`方法和自定义回调函数。接着讨论了线程中的队列,如`Queue`、`LifoQueue`和`PriorityQueue`。然后讲解了`Event()`方法在多线程间通信的作用。最后,文章探讨了如何通过单线程实现并发,如生成器、greenlet模块和gevent模块,以及协程的概念和使用gevent进行IO检测的方法。
摘要由CSDN通过智能技术生成

1.线程回调

在线程池/进程池

每次提交任务,都会返回一个表示任务的对象,Future对象

Future对象具备一个绑定方法,add_done_callback 用于指定回调函数

add 意味着可以添加多个回调函数

如果直接使用Thread的话,如何完成回调

from threading importThreadimporttimedefcall_back(res):print('任务结果拿到了:%s' %res)defparser(res):print('任务结果拿到了:%s' %res)deftask(parser):print('run')

time.sleep(1)

res= 100 #表示任务结果

parser(res) #执行回调函数,并传入任务结果

t= Thread(target=task, args=(call_back,)) #在这里指定parser也可以

t.start()print('over')

View Code

2.线程中的队列

from queue importQueue,LifoQueue,PriorityQueue#与进程中的Joinablequeue使用方法一模一样,但是不具备IPC

#Queue 队列#q = Queue()#

## 可以往里面添加数据#q.put('123')#q.put('456')#

## 可以获取数据#print(q.get())#print(q.get())#

## 获取值,设定取值时间,超时报错## print(q.get(block=True,timeout=3))#

## 告诉队列取值已经处理完毕#q.task_done()#q.task_done()## 等待队列为空后结束队列#q.join()#输出结果#123#456

#LifoQueue,翻译为last in first out 后进先出,先进后出,模拟堆栈的模式

#除了与Queue的队列不一样之外,其他的都一样#lq = LifoQueue()#

#lq.put('123')#lq.put('456')#

#print(lq.get())#print(lq.get())#输出结果#456#123

#具备优先级的队列#PriorityQueue#可以存储一个可以比较大小的对象,对象越小,优先级越高,自定义对象不能使用比较运算符,所以不能存储

#q = PriorityQueue()# #q.put('b')#q.put('a')# #print(q.get()) # 会优先得到a

View Code

3.事件 Event()

了解Event之前,我们先了解一个案例:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值