初识进程
一个正在运行的程序或者软件就是一个进程,它是操作系统进行资源分配的基本单元,也就是说每启动一个进程,操作系统都会给其分配一定的运行资源(内存资源)保证进程的运行。
每个进程拥有自己的独立的地址空间,内存,数据在栈,以及其他用于跟踪执行的辅助数据。
代码说明:
原代码:
import time
def new_time():
return time.asctime(time.localtime(time.time()))
def func():
print('内部开始:',new_time())
time.sleep(5)
print('内部结束:', new_time())
print(new_time())
func()
time.sleep(5)
print(new_time())
总共所用了10秒中的时间。
单进程
单进程顾名思义就是一个主进程里面有一个子进程。
import multiprocessing
import time
def new_time():
return time.asctime(time.localtime(time.time()))
def func():
print('内部开始:',new_time())
time.sleep(5)
print('内部结束:', new_time())
if __name__ == '__main__':
print('外部开始', new_time())
multiprocessing.Process(target=func).start()
print('外部结束', new_time())
多进程
上述案列就是一个单进程的案例。而多进程就是在一个主进程里面创建了多个子进程。
-
首先是multiprocess。Process实例化,并指定回调函数,参数列表
-
实例化之后可以直接调用运行,这就实现了进程运行,节省运行时间
-
这里并行都只是python层面的,并不是实际层面的
-
当总进程多于核心数的时候,多余的没有效果
-
多进程有操作系统调用运行
import time
import multiprocessing
def dan():
for i in range(5):
print('dance......')
time.sleep(1)
def sing():
for i in range(5):
print('sing.....')
time.sleep(1)
if __name__ == '__main__':
da = multiprocessing.Process(target=dan)
si = multiprocessing.Process(target=sing)
da.start()
si.start()
进程传参
当我们的进程里面需要传入参数时,有三种传参方式:
1、元组传参
args:表示以元组的方式给执行任务传参
元组里面的元组顺序要和函数里面的参数顺序保持一致
import multiprocessing
def students(name,age):
print(f'name:{name}\nage:{age}')
if __name__ == '__main__':
student = multiprocessing.Process(target=students,args=('小泉',19))
student.start()
如果只需要传入一个参数时,args=(实参,)参数后面必须加上一个逗号
import multiprocessing
def students(name):
print(f'name:{name}')
if __name__ == '__main__':
student = multiprocessing.Process(target=students,args=('小泉',))
student.start()
2、字典传参
kwargs:表示以字典的方式给执行任务传参
字典里面的key要和函数里面的参数名保持一致,没有顺序要求
import multiprocessing
def students(name,age):
print(f'name:{name}\nage:{age}')
if __name__ == '__main__':
student = multiprocessing.Process(target=students,kwargs={'name':'小泉','age':19})
student.start()
3、元组和字典混合传参
import multiprocessing
def students(name,age):
print(f'name:{name}\nage:{age}')
if __name__ == '__main__':
student = multiprocessing.Process(target=students,args=('小泉',),kwargs={'age':19})
student.start()
新手上线,有什么不对的地方欢迎大家留言