python中的多进程编程方式和多线程非常相似,几乎可以说只是换了一些函数,有了之前讲过的多线程基础,很多地方我就只展示一些代码,在涉及到差别的地方再着重说明。
本文分为如下几个部分事先说明
最简单的多进程
类的形式
进程池
进程之间内存独立
队列
pipe
value
进程锁
事先说明
有两点在写代码时需要注意使用多进程时,最好在文件中编写代码,用cmd来执行,在jupyter经常无法得到想要的结果
创建进程的代码一定要放在if __name__ == '__main__'里面
最简单的多进程
import multiprocessing
import time
def myfun(num):
time.sleep(1)
print(num + 1)
if __name__ == '__main__':
for i in range(5):
p = multiprocessing.Process(target = myfun, args = (i, ))
p.start()
另外,join is_alive daemon name current_process等也都是一样的。
类的形式
import multiprocessing
import requests
from bs4 import BeautifulSoup
class MyProcess(multiprocessing.Process):
def __init__(self, i):
multiprocessing.Process.__init__(self)
self.i = i
def run(self):
url = 'https://movie.douban.com/top250?start={}&filter='.format(self.i*25)
r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser')
lis = soup.find('ol', class_='grid_view').find_all('li')
for li in lis:
title = li.find('span', class_="title").text
print(title)
if __name__ == '__main__':
for i in range(10):
p = MyProcess(i)
p.start()