python 进程池阻塞和非阻塞_python多进程—multiprocessing

本文详细介绍了Python的多进程模块multiprocessing,包括cpu_count()和active_children()方法,Process的创建与常用方法,以及多进程间的独立性。接着讲解了lock组件的重要性,通过实例展示了无锁和加锁情况下多进程读写文件的区别。然后探讨了共享内存Value和Array,以及如何通过Manager实现更复杂的共享数据结构如字典和列表。最后,对比了Pool的apply_async非阻塞和apply阻塞方式在处理任务队列时的区别,并给出了实际示例。
摘要由CSDN通过智能技术生成

一、进程

python中提供多进程包:multiprocessing,支持子进程,通信,共享内存,执行不同形式的同步,提供了Process、Pipi、Lock等组件

多进程和多线程区别:

多线程使用的是CPU的一个核,适合IO密集型

多进程使用的是CPU的多个核,适合运算密集型

1)multiprocessing的方法

cpu_count():统计cpu总数

active_children():获取所有子进程

例子:

#!/usr/bin/env python

import multiprocessing

p = multiprocessing.cpu_count()

m = multiprocessing.active_children()

print(p)

print(m)

运行结果:

8

[]

2)Process进程

创建一个Process对象:p = multiprocessing.Precess(target=worker,args=(2,))

说明:

target = 函数名字

args = 函数需要的的参数,以tuple形式传入

3)Process常用方法

is_alive():判断进程是否存活

run():启动进程

start():启动进程,会自动调用run方法,常用

join(timeout=):等待进程结束或者直到超时

4)Process常用属性

name:进程名字

pid:进程的pid

例子:

#!/usr/bin/env python

import time

import multiprocessing

def worker(interval):

time.sleep(interval)

print("hello,China")

if __name__ == "__main__":

p = multiprocessing.Process(target=worker,args=(5,))

p.start()

print(p.is_alive())

p.join(timeout=3)  # 只等待3秒,如果进程还没结束,则向下执行print(p.name)

print(p.name)

print(p.pid)

print("This is end")

运行结果:

True

Process-1

121764

This is end

hello,China

实例:多进程

import time

import multiprocessing

def worker(name,interval):

print("{0} start" .format(name))

time.sleep(interval)

print("{0} end" .format(name))

if __name__ == "__main__":

print("main start")

print("The computer has {0} core" .format(multiprocessing.cpu_count()))

p1 = multiprocessing.Process(target=worker,args=("worker",2))

p2 = multiprocessing.Process(target=worker,args=("worker",3))

p3 = multiprocessing.Process(target=worker,args=("worker",4))

p1.start()

p2.start()

p3.start()

for p in  multiprocessing.active_childre

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值