进程、线程、队列、同步、异步、阻塞、非阻塞

本文深入探讨了Python中多线程和多进程的应用场景及其限制,解释了multiprocessing模块中的Queue和JoinableQueue如何用于进程间通信及生产者消费者模式。此外还介绍了同步与异步、阻塞与非阻塞的区别。

python多线程并不能提升计算密集型程序的性能,但可以避免阻塞,减少io密集型程序带来的效率降低。

multiprocessing 中的Queue用于IPC,而且可以避免多个进程同时处理同一数据产生的数据安全问题。

multiprocessing中的JoinableQueue,它实例化的对象q有q.task_done(),和q.join()两个特殊方法。用于生产者和消费者之间的工作状态交互。生产者完成所有生产工作后使用q.join()进入阻塞,消费者取出数据并工作完毕后,调用q.task_done()通知q.join(),当所有消费者完成后,q.join()结束阻塞。

queue中的Queue是一个单进程数据队列。

#1. 同步与异步针对的是函数/任务的调用方式:同步就是当一个进程发起一个函数(任务)调用的时候,一直等到函数(任务)完成,而进程继续处于激活状态。而异步情况下是当一个进程发起一个函数(任务)调用的时候,不会等函数返回,而是继续往下执行当,函数返回的时候通过状态、通知、事件等方式通知进程任务完成。

#2. 阻塞与非阻塞针对的是进程或线程:阻塞是当请求不能满足的时候就将进程挂起,而非阻塞则不会阻塞当前进程

进程池和回调函数
1、callback函数是由主进程去调用的,并不是子进程。
2、在执行回调函数之前的那个函数,必须有一个返回值!这个返回值有两个用途,第一个用途是判断这个函数是否执行成功,执行成功才可以执行callback函数,另一个用途就是这个返回值会作为参数传给回调函数。
3、callback回调函数本身必须接收一个参数,这个参数用来接收上一个函数执行完毕后的返回值。
关于回调函数更多信息https://blog.51cto.com/suhaozhi/1926096

转载于:https://www.cnblogs.com/huang99882008/p/10655976.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值