进程和线程

一、生成器

1、生成器是一个特殊的程序,可以被用作控制循环的迭代行为,python中生成器是迭代器的一种,使用yield返回值函数,每次调用yield会暂停,而可以使用next()函数和send()函数恢复生成器。

def A():
    for i in range(10):
        yield i #将函数变成一个迭代器(生成器)
a=A()
print(next(a))
print(next(a))

 

2、try

尝试执行try中的代码,如果有错,则被except捕获,但是整个程序不会崩溃
ef A():
    for i in range(5):
        yield i       
try:
    a=A()
    print(next(a))
    print(next(a))
    print(next(a))
    print(next(a))
    print(next(a))
    print(next(a))
except Exception as e:
    print(e)
print('jxh')

 

二、不定长参数

1、*args位置传参

*args返回的是元组

def haha(*args):
    print(args)
haha(1,3,5)

输出:(1,3,5)#元组

 

2、**kwargs带参数名称的传参

**kwargs返回的是字典

def haha(**kwargs):
     print(kwargs)
 haha(a=1,b=2,c=3)

输出:{'a': 1, 'b': 2, 'c': 3} #字典 
| |
键名 键值

 

3、*args和**kwargs混合用法

注意*args一定要放在前面

def xixi(*args,**kwargs):
    print(args)
    print(kwargs)
 xixi(1,2,3,a=1,b=2,c=3)
输出:(
1, 2, 3) {'a': 1, 'b': 2, 'c': 3}

 

4、装饰器代参实例

def deco1(param):
    print(param)
    def deco(func):
        def warp(*args,**kwargs):
            print(args)
            print(kwargs)
            kwargs['name2']=10
            return func(*args,**kwargs)
        return warp
    return deco
@deco1(100)
def lele(name2):
    print(name2)
lele(name2='jxh')
输出:
100 () {'name2': 'jxh'} 10

 

三、并发和并行的区别

并行:两个或多个事件在同一时刻发生;

并发:两个或多个事件在同一时间间隔内发生。

在操作系统中个,并发是指一个时间段中有几个程序都处于已启动到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

在网络服务器上,并发是指同一时刻能处理的连接数。比如服务器建立了100个TCP连接,即服务器同时维护了100个socket,那么并发量就是1000。

并发的关键是有处理多个任务的能力,不一定要同时。

并行的关键是有同时处理多个任务的能力。

高并发:短时间内大量访问和请求。

四、进程和线程

1、进程就是一个程序在一个数据集上的一次动态执行过程

2、一个进程还可以拥有多个并发的执行线索,简单的说就是拥有多个可以获得CPU调度的执行单元,这就是所谓的线程

 3、进程和线程的关系:

(1)简而言之,一个程序至少有一个进程,一个进程至少有一个线程。

(2)线程的划分尺度小于进程,使得多线程程序的并发性高。

(3)另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,而极大的提高了程序的运行效率。

(4)线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。

    但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

(5)从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。

         但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的主要区别。

线程和线程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正好相反。线程适合于在SMP机器上运行,而进程则可以跨机器迁移。

 

  实例1:

def count(func):
    def warp(*args,**kwargs):
        num = kwargs['num']
        if num > 4:
            print('404')
        else:
            return func(*args,**kwargs)
    return warp
    

@count
def page_1(num):
    print('页面详情')

if __name__ == '__main__':
    for i in range(10):
        page_1(num = i)

 

实例2: 检验密码是否合法: 1、必须含有大写

                                                2、必须含有小写

                                                3、必须含有数字

                                                4、还有一个装饰器统计密码输入次数(不对的情况)

import re
for i in range(5):
    pwd = input("请输入您的密码:")
    if len(pwd) <5 and len(pwd) >18:
        print("密码长度为5到18位")
    else:
        if re.match("^(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])).*$",pwd)==None:
            
            print('密码必须包含大小写字母和数字')
            
        else:
            print ("密码格式正确")
            break
            
else:
    print("您今天最多可以输错五次")

 

转载于:https://www.cnblogs.com/jinxinhua/p/11328652.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux中的进程线程有以下几个区别: 1. 数据结构:在Linux中,线程是通过进程模拟出来的,没有真正意义上的线程数据结构。而在Windows中,操作系统线程创建了thread_struct数据结构,因此有真正意义上的线程。 2. 执行流:在Linux中,每个线程实体对应着操作系统下的一条执行流,通过PCB(task_struct)来模拟。而用户态下创建的线程是通过线程库(pthread_struct)来进行管理。 3. 标识作用:在Linux中,轻量级进程ID(tid)对不同的线程起标识作用,操作系统在进行调度时使用tid。而进程ID(pid)对不同的进程起标识作用。在只有一个线程进程中,tid的值等于pid的值。 4. 线程私有部分:线程私有部分包括运行时栈、一组寄存器/硬件上下文/任务状态段等。 5. 多线程提高效率:多线程能够提高效率的原因是多核和单核环境下的不同。在多核环境下,多线程可以将庞大的任务分成若干份,并交给不同的线程进行处理,同时执行不同步骤的代码,从而提高效率。而在单核环境下,多线程并发执行,使用线程切换来提高整体代码的运行效率。 6. 进程线程的区别:进程是程序运行的实例,是系统分配资源的基本单位,拥有独立的地址空间;线程进程中的一条执行流,是CPU调度的基本单位,共享同一地址空间。创建和撤销进程的开销大于线程,不同进程间不会互相影响,而一个线程挂掉可以将整个进程挂掉。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值