Process与进程池Pool

fork()生成进程只适用于liunx系统,要想跨平台使用多进程需要导入multiprocessing模块。
和fork产生的进程不同,利用Process产生的进程,主进程会等待子进程执行完毕。
也可利用子类来创建进程,自定义类继承Process,重写run()方法,当进程start()时会自动调用run方法。
每个进程都有独立的系统资源,各进程间的变量不共享互不影响。
join()方法可以等待子进程结束后才继续往下走,用于进程间的同步。
1 from multiprocessing import Process 2 import time 3 def test(): 4 while True: 5 print('test') 6 time.sleep(1) 7 8 p = Process(target=test) 9 p.start() 10 11 while True: 12 print('main') 13 time.sleep(1)

Process的参数有:

  • target
    所调用的对象
  • args
    调用函数对象的元组参数
  • kwargs
    调用函数对象的关键字参数字典
  • name
    进程实例的别名

Process常用属性,方法

  • is_alive()
    进程是否还在执行
  • join([timeout])
    等待进程结束,或等待多少秒
  • start()
  • run()
    没有给定target,执行对象中的run()方法
  • terminate()
    立即终止
  • name
  • pid

进程池Pool

用于创建多个进程
3 from multiprocessing import Pool 4 import time 5 import os 6 7 def worker(num): 8 time.sleep(1) 9 print('工人 = %d,任务 = %d '%(os.getpid(),num)) 10 11 pa = Pool(3) 12 for i in range(10): 13 print(i) 14 pa.apply_async(worker,(i,)) 15 print('start') 16 pa.close() 17 pa.join() 18 print('end ')

multiprocess.Pool常用函数

  • apply_async(func,args,kwds)
    使用阻塞方式调用func
  • close()
    关闭Pool,不能继续添加新任务
  • terminate()
  • join(): 主进程阻塞,等待子进程结束,必须在close或terminate之后使用

主进程不等待子进程

你可能感兴趣的:(Process与进程池Pool)