import os,time
from multiprocessing import Process #多进程包
import requests #获取网页源码包
import random #随机数
def download():
urls=["http://www.baidu.com","http://www.qq.com","http://sohu.com"]
i=random.randint(0,2)
response=requests.get(urls[i]) #随机获取一个网页的源码
print("*******************")
print(response.text[:200]) #打印获取到的网页源码前200字符
def main():
print("主进程开始执行-----------------------")
ps=[] #存放创建的子进程
for i in range(3):
p=Process(target=download,name="JC"+str(i),args=()) #target子进程执行的函数,name子进程的名字,args需要给任务传入的参数
ps.append(p) #将进程存入列表中
for i in range(3):
ps[i].start() #将存入列表的进程启动
print(ps) #查看子进程状态
for i in range(3):
ps[i].join() #阻塞主进程,等待子进程执行完毕,主进程才能继续执行下面的代码
print("主进程执行完毕-------------------------")
print(ps) #查看子进程状态
if __name__ == '__main__':
main()
プロセスプールを使用して、マルチプロセス呼び出しを実現します
import os,time
from multiprocessing import Pool #多进程包
import requests #获取网页源码包
import random #随机数
def download(arg):
urls=["http://www.baidu.com","http://www.qq.com","http://sohu.com"]
i=random.randint(0,2)
response=requests.get(urls[i]) #随机获取一个网页的源码
print("*******************")
print(response.text[:200]) #打印获取到的网页源码
def main():
ps=Pool(3) #生成有三个进程的进程池,存进变量ps中
for i in range(5):
ps.apply_async(download,args=(i,)) #调用进程池中的进程执行download()函数,先执行三个任务,谁先执行完成再执行下一个,直到五个任务执行完毕
ps.close() #调用完进程后必须关闭进程池
ps.join() #等待子进程执行完毕
print("执行完成-----------------")
if __name__ == '__main__':
main()
マルチプロセスロック
import multiprocessing
import sys
import time
def worker1(lock):
with lock: #使用with上下文的方式来使用锁
for i in range(5):
time.sleep(1)
print("任务1")
def worker2(lock):
lock.acquire() #加锁
try:
for i in range(5):
time.sleep(1)
print("任务2")
finally:
lock.release() #释放锁
if __name__ == "__main__":
lock=multiprocessing.Lock() #实例化进程锁
ps1=multiprocessing.Process(target=worker1,args=(lock,)) #实例化进程1
ps2=multiprocessing.Process(target=worker2,args=(lock,)) #实例化进程2
ps1.start()
ps2.start()
ps1.join()
ps2.join()
print("程序执行完毕-----------------------")