Python进程简介

进程三种状态
在这里插入图片描述

  • 就绪:已获得运行所需资源,除了cpu资源。
  • 阻塞:等待cpu以外的其他资源
  • 执行→阻塞:执行的进程发生等待事件而无法执行变为阻塞状态。例如IO请求,申请资源得不到满足。
  • 阻塞→就绪:处于阻塞状态在其等待的事件已经发生,并不马上转入执行状态,先转入就绪状态
  • 执行→就绪:时间片用完而被暂停执行。
  • 临界区:一次只允许一个进程进入访问的一段代码。临界区保护原则是有空让进,有限等待。

multiprocessing模块提供了一个process类来代表一个进程对象,这个模块表示像线程一样管理进程,这个是multiprocessing的核心,它与threading相似,对多核的CPU的利用率会比threading更好。

对于multiprocessing中的process类的构造方法如下:

_init_(self, group=None, target=None, name=None, args=(), kwargs={
   })

参数说明:

  • group:进程所属组。(一般为缺省)
  • target:表示调用对象。
  • args:表示调用对象的位置参数元组。
  • name:别名
  • kwarges:表示调用对象的字典。

启动多进程

from multiprocessing import Process
from time import sleep
import os
def task1():
    while True:
        sleep(1)
        print('这是任务1',os.getpid(),'---',os.getppid())


def task2():
    while True:
        sleep(1)
        print('这是任务2',os.getpid(),'---',os.getppid())
if __name__ == '__main__':
    p = Process(target=task1, name='任务1')
    p.start()
    print(p.name)
    p1 = Process(target=task2, name='任务2')
    p1.start()
    print(p1.name)
    print('***************************')

主进程控制字进程启停

from multiprocessing import Process
from time import sleep
import os
def task1(s):
    while True:
        sleep(s)
        print('这是任务1', os.getpid(), '---', os.getppid())


def task2(s):
    while True:
        sleep(s)
        print('这是任务2', os.getpid(), '---', os.getppid())
number = 1
if __name__ == '__main__':
    p = Process(target=task1, name='任务1', args=(1,))
    p.start()
    print(p.name)
    p1 = Process(target=task2, name='任务2', args=(2,))
    p1.start()
    print(p1.name)
    print('***************************')

    while True:
        number += 1
        sleep(0.2)
        if number == 100:
            p.terminate()
            p1.terminate()
            break
        else:
            print('-------number', number)

在这里插入图片描述
一般情况下不能共享全局变量

  1. 进程间的通信应该尽量避免共享数据的方式

  2. 进程间的数据是独立的,可以借助队列或管道实现通信,二者都是基于消息传递的。

from multiprocessing import Process
from time import sleep
import os

m = 1  # 共享全局变量
list1 = []
def task1(s):
    global m
    while True:
        sleep(s)
        m += 1
        list1.append(str(m) + 'task1')
        print('这是任务1', m, list1)


def task2(s):
    global m
    while True:
        sleep(s)
        m += 1
        list1.append(str(m) + 'task2')
        print('这是任务2', m, list1)
number = 1
if __name__ == '__main__':
    p = Process(target=task1, name='任务1', args=(1,))
    p.start()
    print(p.name)
    p1 = Process(target
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值