python学习笔记-线程与进程

线程

官方:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

格式:

    import multiprocessing   #使用进程对象之前要导入进程模块

    p=multiprocessing.Process(target=[函数],arges=(tuple))

    target 函数的名字

    arges 传入函数的参数,为tuple类型数据

常用对象

    is_alive()    #判断是否进程存活,返回bool类型数据

    run()         #启动进程

    start()       #启动进程,自动调用run(),此方法常用

    join(timeout)  #等待进程结束或进程超时

    name       #进程名字

    pid           #进程名字

    terminate #结束进程

举例:

import multiprocessing
import time
def worker(arge,interval):
    print("进程{0}开始".format(arge))
    time.sleep(interval)
    print("进程{0}结束".format(arge))

def main():
    print("开始主进程")
    p1 = multiprocessing.Process(target=worker,args=(1,1))
    p2 = multiprocessing.Process(target=worker,args=(2,1))
    p3 = multiprocessing.Process(target=worker,args=(3,1))
    p1.start()
    p2.start()
    p3.start()
    print("主进程结束")
    print("the number of cpu is: {0}".format(multiprocessing.cpu_count()))    #查看cpu数目
    for i in multiprocessing.active_children():
        print("the active of child is :{0},进程id号:{1},process is alive:{2}".format(i.name,i.pid,i.is_alive()))    #打印子进程名称、id号、存活状态

if __name__ == '__main__':
    main()

结果:

开始主进程
主进程结束
the number of cpu is: 4
the active of child is :Process-1,进程id号:33600,process is alive:True
the active of child is :Process-3,进程id号:34240,process is alive:True
the active of child is :Process-2,进程id号:31216,process is alive:True
进程1开始
进程2开始
进程3开始
进程1结束
进程2结束
进程3结束

Process finished with exit code 0

lock组件

     lock组件

import multiprocessing
import time
def add1(lock, value, number):
    with lock:
        print("start add1 number = {0}".format(number))
        for i in range(1, 5):
            number += value
            time.sleep(0.3)
            print("number = {0}".format(number))
            
def add3(lock, value, number):
    lock.acquire()
    print("start add3 number = {0}".format(number))
    try:
        for i in range(1, 5):
            number += value
            time.sleep(0.3)
            print("number = {0}".format(number))
    finally:
        lock.release()

if __name__ == "__main__":
    lock = multiprocessing.Lock()
    number = 0
    pw = multiprocessing.Process(target=add1, args=(lock, 1, number))
    pa = multiprocessing.Process(target=add3, args=(lock, 3, number))
    pw.start()
    pa.start()
    print("main process end.")

结果:

main process end.
start add1 number = 0
number = 1
number = 2
number = 3
number = 4
start add3 number = 0
number = 3
number = 6
number = 9
number = 12

Process finished with exit code 0

共享内存

    不同进程彼此之间是互不通信,multiprocessing模块中存在Value和array对象,提供进程之间共享内存进行通信

举例:

import multiprocessing
from multiprocessing import Value
import time


def add3(value,number):
    try:
        print("------开始+3进程------")
        for i in range(1,5):
            number.value+=value              #3+3
            print("number = {0}.".format(number.value))
    except Exception as  e:
        raise  e

def add1(value,number):
    try:
        print("------开始+1进程------")
        for i in range(1,5):
            number.value+=value              #1+1
            print("number = {0}.".format(number.value))
    except Exception as  e:
        raise  e


def main():
    number = Value('d',0)
    p1=multiprocessing.Process(target=add1,args=(1,number))
    p2=multiprocessing.Process(target=add3,args=(3,number))
    p1.start()
    p2.start()



if __name__ == '__main__':
    main()

结果:

------开始+3进程------
number = 3.0.
number = 6.0.
number = 9.0.
number = 12.0.
------开始+1进程------
number = 13.0.
number = 14.0.
number = 15.0.
number = 16.0.

Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值