程序员

Python Process创建进程

2019-08-13  本文已影响17人  又绿江南岸1990

fork()函数只能用于Linux、Unix系统之上,无法运行在Windows系统之上,这样就影响了Python的跨平台特性。因此需要利用另一个模块去创建进程,保证在各种平台上都能保证程序的正常运行。

所以我们现在通过Process去创建进程

1、利用Process创建进程

例:利用Process创建进程

使用Process之前,需要导入multiprocessing模块。

使用Process创建进程时,需要为target参数指定一个函数名,当执行到p.start()方法时,进程就会调用该函数名指向的函数,运行函数中的代码,直到函数结束。

2、Process调用带参数的函数

例:调用带参数的函数

如果Process的target参数调用的函数中带有参数,需要在Process初始化时,需要使用args参数,接收的类型为元组,其中的值会传递给target中的形参,进而完成带参数函数的调用。

如果函数只需要一个参数,直接赋值也可以,如果需要多个参数,则需要使用元组类型进行赋值。

上述创建Process的过程有一个弊端,Process初始化时总需要绑定一个执行参数,耦合性比较大,因此我们需要使用另一种更灵活的方式去使用Process创建进程。

3、创建Process子类

例:创建Process子类

以Process为基类,创建Process子类,将Process要调用的程序写在子类重写父类的run()方法中,创建Process子类对象后,调用子类对象的start()方法,调用start()方法后。会调用run()方法,因此就会执行Process子类中的run()方法。

Process类的主要方法有:

start():启动进程,并调用该子进程中的p.run()

run():进程启动进运行的方法,就是它去调用target指定的函数,我们自定义类的类中一定要实现该方法。

terminate():强制终止进程。不会进行任何清理操作,如果p创建了子进程,该子进程就成了僵尸进程,使用此方法需要小心:如果此进程还保存了一个锁那么也将不会释放这个锁,进而导致死锁。

is_alive():判断进程是否是“活着”的状态。

join([timeout]):让主线程等待某一子进程结束,才继续执行主进程。timeout是可选的超时时间。超过一个时间主进程就不等待了。

上一篇下一篇

猜你喜欢

热点阅读