有的时候,咱们也需要自定义进程。
和使用 thread
子类创建线程的方式类似,除了直接使用 Process
类创建进程,还可以通过创建 Process
的子类来创建进程。
需要注意的是,在创建 Process
的子类时,需在子类内容重写 run()
方法。实际上,该方法所起到的作用,就如同第一种创建方式中 target
参数执行的函数。
也就是当你执行 start()
的时候,就是执行 run()
的代码。
另外,通过 Process
子类创建进程,和使用 Process
类一样,先创建该类的实例对象,然后调用 start()
方法启动该进程。下面程序演示如何通过 Process
子类创建一个进程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| import os from multiprocessing import Process
print("当前进程ID:", os.getpid())
def action(name, *add): print(name) for arc in add: print("%s --当前进程%d" % (arc, os.getpid()))
class My_Process(Process): def __init__(self, name, *add): super().__init__() self.name = name self.add = add
def run(self): print(self.name) for arc in self.add: print("%s --当前进程%d" % (arc, os.getpid()))
if __name__ == '__main__': my_tuple = ("http://c.biancheng.net/python/", \ "http://c.biancheng.net/shell/", \ "http://c.biancheng.net/java/") my_process = My_Process("my_process进程", *my_tuple) my_process.start() action("主进程", *my_tuple)
|
程序执行结果为:
当前进程ID: 22240
主进程
http://c.biancheng.net/python/ --当前进程22240
http://c.biancheng.net/shell/ --当前进程22240
http://c.biancheng.net/java/ --当前进程22240
当前进程ID: 18848
my_process进程
http://c.biancheng.net/python/ --当前进程18848
http://c.biancheng.net/shell/ --当前进程18848
http://c.biancheng.net/java/ --当前进程18848
自定义进程的好处,就是可以通过初始化的时候传递参数。
你不能通过 start()
来传递给 run
的参数,但是,可以初始化的时候进行传递。
自定义编程的一个好处就是可以在内部编写函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import time from multiprocessing import Process
# 自定义一个进程类 class My_Process(Process):
def test(self, i): print(i)
def run(self): for i in range(10): self.test(i) time.sleep(1)
if __name__ == '__main__': # 定义为进程方法传入的参数 my_process = My_Process() # 启动子进程 my_process.start() my_process.join()
|