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