首页 > 系统相关 >多任务--进程

多任务--进程

时间:2022-11-16 23:23:55浏览次数:35  
标签:-- print sleep 进程 import os 多任务

并发:

计算机一个内核处理多个任务,其实就是内核在任务间不停的切换,达到好像多个任务同时在执行,实际上每个时刻只有一个任务在执行

并行:

多个任务利用计算机的多核同时执行,达到并行的效果

 

进程:

进程是程序在计算机种运行,代表是的是程序运行的一个状态

 

进程的状态:

就绪态:进程具备执行条件,等待cpu分配资源

运行态:进程占用cpu时间片

等待态:进程暂停运行,让出时间片

 

相关的进程函数

os.getpid()

os.getppid()

os.exit()

sys.exit()

 

python实现多进程:

------基于fork实现:    windows上不支持。只支持linux和unix系统

注意。如果os.fork()创建子进程成功。那么会将父进程的内存空间和代码复制一份给子进程。所以下例中,a变量和print(os.getpid())语句也带到了子进程中,所以会打印两次print(os.getpid())

import os
from time import  sleep

pid = os.fork() #开启子进程,并将自己的内存空间和代码全部复制给子进程
a = 1       #在当前继承将a=1放到内存空间
print(os.getpid())
if pid < 0:
    #pid<0,进程创建失败
    print('create process failed')
elif pid == 0:
    #子进程走这里
    print('this is new process')
    print('a=',a)
else:
    #父进程走这里
    print('tihs is old process')

 

 

 

 

 

---基于multiprocessing创建进程

from multiprocessing import Process

 

--Process()
功能 : 创建进程对象
参数 : target 绑定要执行的目标函数
args 元组,用于给target函数位置传参
kwargs 字典,给target函数键值传参

'''
multiprocessing创建进程
1.编写进程函数
2.生成进程对象
3.启动进程
4.回收进程
'''

from multiprocessing import Process
from time import sleep
# 有参数的进程函数
def worker(sec,name):
    for i in range(3):
        sleep(sec)
        print("I'm %s"%name)
        print("I'm working...")
# 创建进程对象,通过args 给函数位置传参
p = Process(target=worker,args=(2,),
            kwargs={'name':'Baron'})
#启动子进程
p.start()  #其中2表示,只阻塞2秒,2秒过后,子进程自动结束
#回收子进程
p.join()


 

---如何创建多个子进程

from multiprocessing import Process
from time import sleep
import os
def th1():
    sleep(3)
    print("吃饭")
    print(os.getppid(),'--',os.getpid())
def th2():
    sleep(2)
    print("睡觉")
    print(os.getppid(),'--',os.getpid())
def th3():
    sleep(4)
    print("打豆豆")
    print(os.getppid(),'--',os.getpid())
things = [th1,th2,th3]
jobs = []
for th in things:
    p = Process(target=th)
    jobs.append(p)  # 对进程对象进行存储
    p.start()
# [i.join() for i in jobs]
# 一起回收
for i in jobs:
    i.join()

 

 

--进程池

进程的创建和销毁的过程会消耗的资源较多,如果任务量很多,每个任务又是在很短时间内完成,需要频繁创建进程和销毁,因此消耗大量的计算机资源,所以我们可以创建一定数量的进程来处理事件,事件处理完进 程不退出而是继续处理其他事件,直到所有事件全都处理完毕统一销毁。增加进程的重复利用,降低资源消耗。

 

标签:--,print,sleep,进程,import,os,多任务
From: https://www.cnblogs.com/powfu/p/16897825.html

相关文章

  • 数组指针强制转换为结构体指针
    前两天在看TI官方提供的BasicRF的源码时,发现一个看不懂的地方,就是将一个数组名强制转换为结构体指针,如下所示。   在上面的图片中,basicRfPktHdr_t是一个结构体,rxM......
  • [ZJOI2008]骑士
    P2607基环树板子题(虽然打了好久好久)题目大意是给你一n个人的能力值,在每个人都有一个死敌不能同时被选中的情况下,从中挑出一些人,问能力值最大是多少。首先,为什么会往基......
  • 力扣19 删除链表的倒数第N个结点
    题目:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例: 输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5] 思路:给两个指针,让快指针和慢指......
  • pytest文档82 - 用例收集钩子 pytest_collect_file 的使用
    前言pytest提供了一个收集用例的钩子,在用例收集阶段,默认会查找test_*.py文件或者*_test.py文件。如果我们想运行一个非python的文件,比如用yaml文件写用例,那么就需要......
  • ES6之简化对象写法
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>简化......
  • 【模板】多项式乘法 FFT
    postedon2022-08-0223:57:12|under模板|source膜拜,抄写problem\[c_k=\sum_{i+j=k}a_ib_j.\]\(a,b\)已知,要求\(O(n\logn)\)。prework:复数定义初中数学中......
  • 真正“搞”懂HTTP协议04之搞起来
    前两篇文章,我们从空间和时间的角度都对HTTP有了一定的学习和理解,那么基于上一篇的HTTP发展的时间顺序,我会在后面的文章由浅入深,按照HTTP版本内容的更迭,一边介绍相关字......
  • 【网络编程】判断字节序的三种方法
    判断字节序的方法有三种,第一种利用联合体来做判断;第二种直接判断大于一个字节的类型最低位的值;第三种利用位域。1、为啥会有两种字节序算是历史原因吧,小端序符合......
  • 组成原理 #0
    计算机组成原理“练拳不练功,到老一场空”。如果越早去弄清楚计算机的底层原理,在你的知识体系中“储蓄”起这些知识,也就意味着你有越长的时间来收获学习知识的“利息”......
  • P3469 [POI2008]BLO-Blockade
    P3469[POI2008]BLO-Blockade#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;constintN=2e5+5;constintM=2e6+5;inth[N],ne[M],e[M],tot;v......