python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。Python提供了multiprocessing。
多进程(单一参数):
from multiprocessing import Process
def run_test(name,**kwargs):
print('hhh')
if __name__=="__main__":
#args传递元祖,kwargs传递字典
#元祖的逗号是不能省略的
#创建子进程
p=Process(target=run_test,args=('test',),kwargs={'key':12})
#调用子线程
p.start()
多线程(多参数):
from multiprocessing import Process
def run_test(name,age,**kwargs):
print('hhh')
print('字典kwargs:',kwargs)
if __name__=="__main__":
#args传递元祖,kwargs传递字典
#元祖的逗号是不能省略的
#创建子进程
p=Process(target=run_test,args=('test',23),kwargs={'key':12})
#调用子线程
p.start()
添加JOIN方法来让主进程等待子进程执行完:
from multiprocessing import Process
def run_test(name,**kwargs):
print('hhh')
if __name__=="__main__":
#args传递元祖,kwargs传递字典
#元祖的逗号是不能省略的
#创建子进程
p=Process(target=run_test,args=('test',),kwargs={'key':12})
#调用子线程
p.start()
p.join()
from multiprocessing import Process
def run_test(name,**kwargs):
print('hhh')
if __name__=="__main__":
#args传递元祖,kwargs传递字典
#元祖的逗号是不能省略的
#创建子进程
p=Process(target=run_test,args=('test',),kwargs={'key':12})
#调用子线程
p.start()
p.join()
print('主线程执行完毕')
join所完成的工作就是线程同步,即主线程任务结束之后,进入阻塞状态,一直等待其他的子线程执行结束之后,主线程再终止
join内添加参数,没有设置守护进程时,简单的来说,就是给每个子线程一个timeout的时间,让他去执行,时间一到,不管任务有没有完成,直接杀死。
from multiprocessing import Process
import time
def run_test(name, **kwargs):
print('子进程进行')
time.sleep(3)
print("子进程进行完毕")
if __name__ == "__main__":
# args传递元祖,kwargs传递字典
# 元祖的逗号是不能省略的
# 创建子进程
p = Process(target=run_test, args=('test',), kwargs={'key': 12})
print('主进程执开始执行')
# 调用子线程
p.start()
p.join(4)
print('主进程执行完')
未加join之前:
加了join之后: