python多线程(二)

range迭代器

创建range的对象

range(数值)
range(起点值,终点值)
range(起点值,终点值,步长)

它的效果相当于给我们快速的生成了一个列表

但是,它比列表省空间,效率高

列表生成式

  • 特点

    节省空间,比直接的列表要省空间

  • 写法

    生成的列表 = [变量 for 变量 in 容器]
    
  • 案例

    一行代码打印九九乘法表

    print(([(['%s*%s=%-2s' % (y, x, x*y) for y in range(1, x+1)]) for x in range(1, 10)]))
    

模块与包的导入

当我们需要导入一个模块时可使用import 或者 from...import方式来导

执行命令后,解释器会根据优先级来寻找

1,最优先,从当前执行文件所在的工作目录开始找

2,根据环境变量的顺序依次查找

只要一找到对应的要导入的内容,就会停止继续的搜寻

import

  • 导入方式

    import 模块名
    

    举例

    import pygame

  • 调用方式

    模块名.标识符
    

    举例

    pygame.Rect()

from…import

  • 导入方式

    从目录中导入模块

    from 目录1.目录2 import 模块
    

    从模块中导入标识符

    from 模块 import 标识符
    

    从模块中导入所有标识符

    from 模块 import *
    
  • 调用方式,使用模块内的标识符

    从目录中导入模块的情况

    模块.标识符
    

    从模块中导入标识符

    直接使用

    标识符
    

注意

a模块导入了自定义的b模块

单独执行a模块是可以获取b中标识符的数据的

如果,m.py导入了a模块,并且m模块与a模块不在同一级目录

当以m.py启动时,会出现报错

# 多线程

## 线程的模块

import threading




thread
英 [θred] 美 [θred]
n.
(棉、毛、丝等的)线;线索;脉络;思绪;思路;贯穿的主线;线状物;细细的一条
v.
穿(针);纫(针);穿过;(使)穿过;通过;穿行;穿成串;串在一起






## 线程对象的创建

创建一个线程,指向的函数,不接收参数的情况

t = threading.Thread(target=函数名)


创建一个线程,指向的函数,收参数的情况

t = threading.Thread(target=函数名, args=(实参1,))




target
英 [ˈtɑːɡɪt] 美 [ˈtɑːrɡɪt]
n.
目标;指标;(攻击的)目标,对象;靶;靶子
v.
把…作为攻击目标;把…作为批评的对象;面向,把…对准(某群体)




## 让线程对象t开始工作

t.start()




start
英 [stɑːt] 美 [stɑːrt]
v.
开始,着手,动手(做或使用);(使)发生,开始进行;开动;发动;启动
n.
开头;开端;开始;起始优势;良好的基础条件




## 主线程与子线程的关系

生命周期

我们的py文件运行起来的时候,就会有一个主线程

当子线程对象创建后,当子线程对象运行时,才会创造出来新的线程,叫做子线程

子线程如果代码没有运行结束,主线程是会等待子线程的

直接子线程全部运行完毕

主线程才会结束



# 进程与线程的关系

## 进程的主要功能

分配资源

## 线程的主要功能

执行任务

## 包含关系

进程包含线程

每开一个进程出来,都必然会有一个主线程

进程提供了资源(内存空间)

线程主要执行任务




# 多进程

## 多进程的模块

import multiprocessing


多种方式前进



## 创建一个进程对象

p = multiprocessing.Process(target=函数名)

``

让进程对象p开始工作

p.start()
multi
英 ['mʌlti]   美 [ˈmʌlti]  
n.
多种;多数
process
英 [ˈprəʊses , prəˈses]  美 [ˈprɑːses , prəˈses]  
n.
(为达到某一目标的)过程;进程;(事物发展,尤指自然变化的)过程,步骤,流程;做事方法;工艺流程;工序
v.
加工;处理;审阅,审核,处理(文件、请求等);数据处理
v.
列队行进;缓缓前进
第三人称单数: processes 复数: processes 现在分词: processing 过去式: processed 过去分词: processed
派生词: processing n.
记忆技巧:pro 向前 + cess 行走,前进 → 向前走的〔历程〕→ 过程
process的现在分词

ing代表正在进行某个事件

eat,吃

eating,正在吃

thread

threading

进程对象p的等待连接

p.join()

功能特性:

当代码读到这个命时

解释器会关注一下进程对象p它是否已经执行完成了

如果,没有执行完成,卡住

直到p的代码全部执行结束,才会通

查看进程的id

查看当前进程的id

os.getpid()

``
get,得到
p,process,进程
id,编号


通过进程对象查

进程对象.id


查看当前进程的父进程id

os.getppid()


p,parent,父母





判断进程对象p是否存活

p.is_alive





# 进程与线程的比较

## 多线程可以共享全局变量




# 线程锁

- 功能

  解决多个线程同时使用全局变量,有可能会造成的数据的混乱

- 如何创建锁

锁对象 = threading.Lock()


lock
英 [lɒk] 美 [lɑːk]
v.
(用锁)锁上;被锁住;把…锁起来;(使)固定,卡住,塞住
n.
锁;车锁;制动器;锁定器;制轮楔;(机器部件等的)锁定




- 如何使用锁

- 上锁

  ```
  锁对象.acquire()
  ```

  ```
  acquire
  英 [əˈkwaɪə(r)]   美 [əˈkwaɪər]  
  v.
  (通过努力、能力、行为表现)获得;购得;获得;得到
  ```

  

- 解锁

  ```
  锁对象.release()
  ```

  ```
  release
  英 [rɪˈliːs]   美 [rɪˈliːs]  
  v.
  释放;放出;放走;放开;松开;使自由移动(或飞翔、降落等);发泄;宣泄
  n.
  释放;获释;公开;发行;发布;新发行的东西;(尤指)新激光唱片,新电影
  
  ```

  

# 进程锁

- 创建锁

进程锁对象 = multiprocessing.Lock()




- 使用锁

- 上锁

  ```
  进程锁对象.acquire()
  ```

  

- 解锁

  ```
  进程锁对象.release()
  ```



# 守护进程

进程对象.daemon = True




daemon
英 [ˈdiːmən] 美 [ˈdiːmən]
n.
(古希腊神话中的)半神半人精灵




# 信号量

- 创建对象

信号量对象 = multiprocessing.Semaphore(钥匙的数量)


Semaphore
英 [ˈseməfɔː®] 美 [ˈseməfɔːr]
信號量;旌旗灯号量;信号量;信号灯;信号


- 使用

  - 获得-从面版上拿

    ```
    信号量对象.acquire()
    ```

    

  - 释放-归还到面版上

    ```
    信号量对象.release()
    ```

    





# 同步与异步

# 阻塞与非阻塞
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值