一.背景篇
如何让计算机实现并发作业,提高运行效率是很重要的。但是通常我们提到并发都会想到线程,在同一个进程内创建多线程可以共享资源,同时创建线程的开销会小于创建进程。但是线程之间的竞争资源(锁)同步问题还是要消耗一些资源,并且多线程编程对很多程序员来说并不友好,毕竟大部分人的思维是串行的吧,冯诺依曼设计的计算机架构也是以顺序执行为基础的~
重点是对于python而言,由于其使用了全局解释锁(GIL),所以python的多线程并不能实现并发。因此,python的并发是通过多进程来实现的!!!
然后,很自然你就会思考了,进程之间不共享资源,实现通信就会麻烦一些咯,不过好在multiprocessing内提供了很多进程间通信的接口,包括管道pipe,队列queue等。
对于更大型的项目,我们部署到多台服务器上运行的话,机器间通信会更麻烦一些,不过也有很多并行框架,很经典的celery之类的。而且远程主机间通信业有很多方式,比如使用消息队列实现通信的kafka~
二.实战代码篇
下面的每个例子虽然都只给了代码,但是代码我都做了非常非常详细的注释,相信我们都能从其中得到知识的提升!~
参考Python标准库10 多进程初步 (multiprocessing包)
1.multithread_面向过程
import threading
import time
import os
# a program to simulate selling tickets in multi-thread way
# u may realize that this is almost precedure-oriented programming
# for OOP(object-oriented programming), see'multhr_oop.py'
# this function can be any function to do other chores.
def doChore():
#time.sleep(0.5)
print 'hh, I am drinking water!'
# function for each thread
def booth(tid):
# use keyword