Skip to main content

Command Palette

Search for a command to run...

Python 进程

Published
3 min read
Python 进程

进程

什么是进程

  • 进程就是程序执行的载体

进程在生活中的应用

  • 我们打开的每个软件 游戏,执行的每一个python脚本都是启动一个进程
  • 软件(游戏, 脚本) == 进程

进程的口粮

  • 每一个进程像人一样需要吃饭,他的粮食就是:内存和cpu

多进程

  • 主进程创建子进程
  • 父进程创建子进程

多进程的执行方式

  • cpu分配空余核心给进程

n

coding:utf-8

""" 学生信息库 """

class NotArgError(Exception): def init(self, message): self.message = message

class StudentInfo(object): def init(self, students): self.students = students

def get_by_id(self, student_id):
    return self.students.get(student_id)

def get_all_students(self):
    for id_, value in self.students.items():
        print('学号: {},姓名{},年龄{},性别{},班级{}'.format(
            id_, value['name'], value['age'], value['sex'], value['class_number']
        ))
    return self.students

def add(self, **student):
    try:
        self.check_user_info(**student)
    except Exception as e:
        raise e
    self.__add(**student)

def adds(self, new_students):
    for student in new_students:
        try:
            self.check_user_info(**student)
        except Exception as e:
            print(e, student.get('name'))
            continue
        self.__add(**student)

def __add(self, **student):
    new_id = max(self.students) + 1
    self.students[new_id] = student

def delete(self, student_id):
    if student_id not in self.students:
        print('{}并不存在'.format(student_id))
    else:
        user_info = self.students.pop(student_id)
        print('学号是{}, {}同学的信息已经被删除了'.format(student_id, user_info['name']))

def deletes(self, ids):
    for id_ in ids:
        if id_ not in self.students:
            print(f'{id_}不存在学生库中')
            continue
        student_info = self.students.pop(id_)
        print(f'学号{id_} 学生{student_info["name"]} 已被移除')

def update(self, student_id, **kwargs):
    if student_id not in self.students:
        print('并不存在这个学号:{}'.format(student_id))

    try:
        self.check_user_info(**kwargs)
    except Exception as e:
        raise e

    self.students[student_id] = kwargs
    print('同学信息更新完毕')

def updates(self, update_students):
    for student in update_students:
        try:
            id_ = list(student.keys())[0]
        except IndexError as e:
            print(e)
            continue
        if id_ not in self.students:
            print(f'学号{id_}不存在')
            continue
        user_info = student[id_]
        try:
            check = self.check_user_info(**user_info)
        except Exception as e:
            print(e)
            continue
        self.students[id_] = user_info
    print('所有用户信息更新完成')

def search_users(self, **kwargs):

    assert len(kwargs) == 1, '参数数量传递错误'
    values = list(self.students.values())
    key = None
    value = None
    result = []

    if 'name' in kwargs:
        key = 'name'
        value = kwargs[key]
    elif 'sex' in kwargs:
        key = 'sex'
        value = kwargs['sex']
    elif 'class_number' in kwargs:
        key = 'class_number'
        value = kwargs[key]
    elif 'age' in kwargs:
        key = 'age'
        value = kwargs[key]
    else:
        raise NotArgError('没有发现搜索的关键字')

    for user in values:  # [{name, sex, age, class_number}, {}]
        # print(user[key])
        # print(value)
        if value in user[key]:
            result.append(user)
    return result

def check_user_info(self, **kwargs):
    assert len(kwargs) == 4, '参数必须是4个'

    if 'name' not in kwargs:
        raise NotArgError('没有发现学生姓名参数')
    if 'age' not in kwargs:
        raise  NotArgError('缺少学生年龄参数')
    if 'sex' not in kwargs:
        raise NotArgError('缺少学生性别参数')
    if 'class_number' not in kwargs:
        raise NotArgError('缺少学生班级参数')

    name_value = kwargs['name']  # type(name_value)
    age_value = kwargs['age']
    sex_value = kwargs['sex']
    class_number_value = kwargs['class_number']
    # isinstance(对比的数据,目标类型) isinstance(1, str)

    if not isinstance(name_value, str):
        raise TypeError('name应该是字符串类型')
    if not isinstance(age_value, int):
        raise TypeError('age应该是整形')
    if not isinstance(sex_value, str):
        raise TypeError('sex应该是字符串类型')
    if not isinstance(class_number_value, str):
        raise TypeError('class_number应该是字符串类型')

students = { 1: { 'name': 'dewei', 'age': 33, 'class_number': 'A', 'sex': 'boy' }, 2: { 'name': '小慕', 'age': 10, 'class_number': 'B', 'sex': 'boy' }, 3: { 'name': '小曼', 'age': 18, 'class_number': 'A', 'sex': 'girl' }, 4: { 'name': '小高', 'age': 18, 'class_number': 'C', 'sex': 'boy' }, 5: { 'name': '小云', 'age': 18, 'class_number': 'B', 'sex': 'girl' } }

if name == 'main': students_info = StudentInfo(students) user = students_info.get_by_id(1) students_info.add(name='dewei', age=34, class_number='A', sex='boy')

# print(students_info.students)
users = [
    {'name': 'xiaoming', 'age': 17, 'class_number': 'b', 'sex': 'boy'},
    {'name': 'xiaohong', 'age': 18, 'class_number': 'c', 'sex': 'girl'}
]
students_info.adds(users)
students_info.get_all_students()
print('-----------------')
students_info.deletes([7, 8])
students_info.get_all_students()
print('-------------')
students_info.updates([
    {1: {'name': 'dewei.zhang', 'age': 18, 'class_number': 'A', 'sex': 'boy'}},
    {2: {'name': '小慕同学', 'age': 18, 'class_number': 'A', 'sex': 'boy'}}
])
students_info.get_all_students()
result = students_info.search_users(name='d')
print(result)
result = students_info.search_users(name='小')
print(result)
# 如果同学想用年龄字段模糊查询,
# 需要把年龄改为str类型
print('---------------')
result = students_info.search_users(name='')
print(result)

```

5 views

More from this blog

MySQL | 表的内连接

数据操作语言:表连接查询(一) 从多张表中提取数据 从多张表提取数据,必须指定关联的条件。如果不定义关联条件就会出现无条件连接,两张表的数据会交叉连接,产生 笛卡尔积。 规定了连接条件的表连接语句,就不会出现笛卡尔积。 # 查询每名员工的部门信息 SELECT e.empno,e.ename,d.dname FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno; 表连接的分类 表连接分为两种:内连接 和 外连接 内连接是结果集中只保留符合...

May 16, 20221 min read13
MySQL | 表的内连接

MySQL | 分组查询的应用

数据操作语言:分组查询 为什么要分组? 默认情况下汇总函数是对全表范围内的数据做统计 GROUP BY 子句的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对每个小区域分别进行数据汇总处理 SELECT deptno,AVG(sal) FROM t_emp GROUP BY deptno; SELECT deptno,ROUND(AVG(sal)) FROM t_emp GROUP BY deptno; -- ROUND 取整 逐级分组 数据库支持多列分组条件,执行的时候...

Apr 27, 20221 min read10
MySQL | 分组查询的应用

MySQL | 聚合函数的使用

数据操作语言:聚合函数 什么是聚合函数 聚合函数在数据的查询分析中,应用十分广泛。聚合函数可以对 数据求和、求 最大值 和 最小值 、求 平均值 等等。 求公司员工的评价月收入是多少? SELECT AVG(sal+IFNULL(comm,0)) FROM t_emp; SELECT AVG(sal+IFNULL(comm,0)) AS avg FROM t_emp; SUM 函数 SUM 函数用于求和,只能用户数字类型,字符类型的统计结果为 0 ,日期类型统计结果是毫秒数相加 SE...

Apr 26, 20221 min read8
MySQL | 聚合函数的使用
U

Untitled Publication

173 posts

Python 进程