一、进程与线程
对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程。
有些进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些 '子任务' 称为线程(Thread)。
由于每个进程至少要干一件事,所以,一个进程至少有一个线程。当然,像Word这种复杂的进程可以有多个线程,多个线程可以同时执行,多线程的执行方式和多进程是一样的,也是由操作系统在多个线程之间快速切换,让每个线程都短暂地交替运行,看起来就像同时执行一样。当然,真正地同时执行多线程需要多核CPU才可能实现。
我们前面编写的所有的Python程序,都是执行单任务的进程,也就是只有一个线程。如果我们要同时执行多个任务怎么办?
多任务的实现有3种方式:
- 多进程模式:启动多个进程,每个进程虽然只有一个线程,但多个进程可以一块执行多个任务。
- 多线程模式:启动一个进程,在一个进程内启动多个线程,这样,多个线程也可以一块执行多个任务。
- 多进程+多线程模式:启动多个进程,每个进程再启动多个线程,这样同时执行的任务就更多了,但这种模型很复杂,实际很少采用。
当然,“多任务' 在Mac OS X,UNIX,Linux,Windows等操作系统上都可以实现,本篇文章我们主要讲述如何在Windows操作系统上用Python程序实现多个任务。
二、多进程
由于Python是跨平台的,自然也应该提供一个跨平台的多进程支持。multiprocessing模块就是跨平台版本的多进程模块。
multiprocessing模块提供了一个Process类来代表一个进程对象,下面的例子演示了启动一个子进程并等待其结束:
from multiprocessing import Process #multiprocessing模块提供了一个Process类来代表一个进程对象
import requests
import re
import time
code=['002348','002426','300173','000030','300542']
m1=re.compile(r"price: '(\d{1,3}\.\d{2})'") #预编译匹配股票的价格
#子进程要执行的代码
def getprice(id):
txt=requests.get("http://quotes.money.163.com/1%s.html"%id).text
price=m1.findall(txt)[0] #获取股票价格
print(id,price)
if __name__=='__main__':
#创建子进程时&#

最低0.47元/天 解锁文章
203

被折叠的 条评论
为什么被折叠?



