文章目录

  • 一、复用TCp服务端和TCP接收端
  • 二、模块导入
  • 一、with上下文管理器
  • 二、多任务
  • 一、互斥锁和GIL
  • 二、进程池
  • 进程
  • 线程
  • 协程
  • 一、linux文件目录
  • 二、linux命令


一、复用TCp服务端和TCP接收端
二、模块导入
  1. import module
# 模块导入方式一
import a_module
a_module.func()
  1. import package.module
# 模块导入方式二
import packet_A.module_A
packet_A.module_A.func()
  1. from module import 成员
# 模块导入方式三
from a_module import func
func()
  1. from module import *
# 模块导入方式四
# 此方法类似于深拷贝, 将所有的内容导过来, 但也有不好的,容易产生命名冲突。
from a_module import *
func()
  1. from package import module
# 模块导入方式五
from packet_A import module_A
module_A.func()
  1. from package.module import 成员
# 模块导入方式六
from packet_A.module_A import func
func()
一、with上下文管理器
  • with语句
  • __ exit __参数:
  • __ enter __参数:
import time


class MyOpen(object):
    def __init__(self, file, mode):
        self.__file = file
        self.__mode = mode

    def __enter__(self):
        print('__enter__run ...打开文件')
        self.__handle = open(self.__file, self.__mode)
        return self.__handle         #return 的返回值在with接收

    def __exit__(self, exc_type, exc_val, exc_tb):
        print('__exit__... run...关闭文件')
        if exc_type:
            print('有错误')
        self.__handle.close()
        return True
        #return False 


with MyOpen('test', 'r') as f:
        f.write('python 大家好')
        time.sleep(3)
print('over')
二、多任务

操作系统同时完成多项任务处理

并发:指的是任务数多于cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行

并行:当任务数小于或者等于cpu核数时,每一个任务都有对应的cpu来处理执行,即任务真的是一起执行的

  • 继承Thread类
import threading
import time


def download_music():
    """模拟下载歌曲,需要5秒钟下载完成"""
    for i in range(5):
        time.sleep(1)  # 休眠1秒
        print("---正在下载歌曲%d---" % i)


def play_music():
    """模拟播放歌曲,需要5秒钟下载完成"""
    for i in range(5):
        time.sleep(1)  # 休眠1秒
        print("---正在播放歌曲%d---" % i)


def main():
   
    # 创建线程对象t1
    # target: 指向新开启的线程要执行的代码
    t1 = threading.Thread(target=download_music)
    t2 = threading.Thread(target=play_music)

    t1.start()  # 启动线程,既然线程开始执行
    t2.start()


if __name__ == '__main__':
    main()
一、互斥锁和GIL

GIL 是Python 解释层面的锁,解决解释器中多个线程的竞争资源问题

二、进程池

如果要使用Pool创建进程,就需要使用multiprocessing.Manager()中的Queue(),而不是multiprocessing.Queue(),否则会得到一条如下的错误信息:

.

# -*- coding:utf-8 -*-
from multiprocessing import Pool
import os, time, random

def worker(msg):
    t_start = time.time()
    print("%s开始执行,进程号为%d" % (msg,os.getpid()))
    # random.random()随机生成0~1之间的浮点数
    time.sleep(random.random()*2) 
    t_stop = time.time()
    print(msg,"执行完毕,耗时%0.2f" % (t_stop-t_start))

po = Pool(3)  # 定义一个进程池,最大进程数3
for i in range(0,10):
    # Pool().apply_async(要调用的目标,(传递给目标的参数元祖,))
    # 每次循环将会用空闲出来的子进程去调用目标
    po.apply_async(worker,(i,))

print("----start----")
po.close()  # 关闭进程池,关闭后po不再接收新的请求
po.join()  # 等待po中所有子进程执行完成,必须放在close语句之后
print("-----end-----")
进程

进程是操作系统进行资源分配和调度的一个基本单位.

线程

是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

1.子线程何时开启,何时运行
当调用thread.start()时 开启线程,再运行线程的代码
2.子线程何时结束
子线程把target指向的函数中的语句执行完毕后,或者线程中的run函数代码执行完毕后,立即结束当前子线程
3.查看当前线程数量
通过threading.enumerate()可枚举当前运行的所有线程
4.主线程何时结束
所有子线程执行完毕后,主线程才结束

协程

python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元

一、linux文件目录
二、linux命令

ping

pwd

ls

-a

~:家目录

cd - :切换到上一路径

touch:创建文件

mkdir:创建文件夹

rm:删除文件