创建进程基本用法
# 当前文件下运行的程序叫主进程,子进程只能在主进程下创建
from multiprocessing import Process
import time
def get_url(url):
print("这是一个子进程",url)
if __name__ == '__main__':
# 一次只能创建一个子进程,target=get_url表示绑定一个任务,创建一个子进程
# args=('www.1.com',),表示给get_url任务传参
p = Process(target=get_url,args=("www.1.com",))
p.start()
print('这是一个主进程')
返回结果:
这是一个主进程
这是一个子进程 www.1.com
创建多进程
from multiprocessing import Process
import time
def get_url(url):
time.sleep(2)
print("这是一个子进程",url)
if __name__ == '__main__':
# for循环相当于主进程遇到了阻塞,并行或并发主要是为了解决阻塞的问题,
# 所以可以找到程序耗时最多的地方来创建进程
for i in ["www.1.com","www.2.com","www.3.com"]:
p = Process(target=get_url,args=(i,))
p.start()
# 主进程和子进程哪个先完成,主要是看哪个运行效率高,效率高的先执行
print('这是一个主进程')
返回结果:
这是一个主进程
这是一个子进程www.3.com
这是一个子进程www.1.com
这是一个子进程www.2.com
处理先完成子进程再完成主进程的方法
from multiprocessing import Process
import time
def get_url(url):
time.sleep(2)
print('这是一个主进程,',url)
if __name__ == '__main__':
start = time.time()
list_data = ["www.1.com","www.2.com","www.3.com"]
process_list = [] # 存储子进程
for url in list_data:
p = Process(target=get_url,args=(url,))
process_list.append(p)
p.start()
for _process in process_list:
# 调用join的子进程,子进程结束后才会执行主进程
# 表示process_list下的所有进程运行结束后才可以运行主进程
_process.join()
print("总耗时:",time.time()-start)
返回结果:
这是一个子进程,www.3.com
这是一个子进程,www.1.com
这是一个子进程,www.2.com
总耗时: 2.193899631500244
守护进程
from multiprocessing import Process
import time
def get_url(url):
time.sleep(2)
print("这是一个子进程", url)
if __name__ == '__main__':
for i in ["www.1.com", "www.2.com", "www.3.com"]:
p = Process(target=get_url, args=(i,))
# 子进程创建前先设置守护进程,表示主进程结束后,子进程无论有没有结束都终止运行
p.daemon=True
p.start()
print('这是一个主进程')
返回结果:
这是一个主进程