python多进程系列(五)进程池

一、常用方法:

1、获取当前进程id
multiprocessing.current_process().pid
os.getpid()
2、获取父进程id
os.getppid()
3、获取进程名称
multiprocessing.current_process().name
4、线程是由子线程完成这个回调函数
5、进程是由主线程完成这个回调函数

二、进程池

1、主进程不等待子进程运行结束,直接往下执行
import time
from concurrent.futures import ProcessPoolExecutor

def demo(num):
    print(num)
    time.sleep(5)

if __name__ == '__main__':
    pool = ProcessPoolExecutor(2)
    for i in range(10):
        # pool.map(demo,[1,2,3])  会执行3次,将列表内容作为参数传递
        pool.submit(demo,i)
    print("主进程不会等待,会马上执行这里")
2、主进程等待所有子进程运行结束再往下执行
from concurrent.futures import ProcessPoolExecutor

def demo(num):
    print(num)
    time.sleep(1)

if __name__ == '__main__':
    pool = ProcessPoolExecutor(2)
    for i in range(10):
        # pool.map(demo,[1,2,3])
        pool.submit(demo,i)
    pool.shutdown(True)
    print("主进程等待所有子进程运行结束再往下执行")
3、回调函数使用
import time
import multiprocessing
from concurrent.futures import ProcessPoolExecutor

def demo(num):
    print("任务函数的进程id:",multiprocessing.current_process().pid)
    print(os.getpid(),"父进程id:",os.getppid())
    print(num)
    time.sleep(1)
    return num
#回调函数
def call_back(res):
    #线程是由子线程完成这个回调函数
    #进程是由主进程完成这个回调函数
    print("回调函数的进程id:",multiprocessing.current_process().pid)
    print("获取demo函数的返回值:",res.result())

if __name__ == '__main__':
    pool = ProcessPoolExecutor(2)
    for i in range(10):
        print("主进程id:",multiprocessing.current_process().pid)
        print("主进程id:",os.getpid())
        # pool.map(demo,[1,2,3])
        fur = pool.submit(demo,i)
        #call_back的参数是demo函数的返回值,会自动传递
        fur.add_done_callback(call_back)
    pool.shutdown(True)
    print("主进程等待所有子进程运行结束再往下执行")

三、进程池中锁的使用

import multiprocessing

def demo(num,lock):
    with lock:
        num += 1

if __name__ == '__main__':
    p = ProcessPoolExecutor(3)
    #lock = multiprocessing.RLock() #进程池不能使用进程的锁
    manage = multiprocessing.Manager()#进程池有专门的锁和队列
    lock_obj = manage.RLock()
    for i in range(5):
        p.submit(demo,1,lock_obj)

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值