前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python那些包

python那些包

作者头像
小闫同学啊
发布2019-07-18 15:35:16
1.1K0
发布2019-07-18 15:35:16
举报
文章被收录于专栏:小闫笔记

正文共: 4286 字 5 图 预计阅读时间: 11 分钟

每日分享

Anything's possible if you've got enough nerve.

如果你有足够的勇气,一切皆有可能。

小闫语录

不知道鼓起勇气尝试之后是否成功,但是我晓得尝试了才有可能成功,不尝试肯定不成功。

python那些包

OS

OS模块提供了一些对文件或文件夹的操作,下面我们介绍一些常用的命令:

文件重命名:

代码语言:javascript
复制
os.rename('小闫笔记.txt','小闫笔记plus.txt')

删除文件:

代码语言:javascript
复制
os.remove('小闫笔记.txt')

创建文件夹:

代码语言:javascript
复制
os.mkdir('小闫工作目录')

获取当前目录:

代码语言:javascript
复制
os.getcwd()

切换到上一级目录:

代码语言:javascript
复制
os.chdir('../')

获取当前目录下的目录列表:

代码语言:javascript
复制
os.listdir('./')

删除文件夹:

代码语言:javascript
复制
os.rmdir('小闫工作目录')

获取当前进程编号:

代码语言:javascript
复制
os.getpid()

获取父进程编号:

代码语言:javascript
复制
os.getppid()

杀死进程:

代码语言:javascript
复制
os.kill()

sys

获取输入的命令行参数,第一个元素是程序本身路径:

代码语言:javascript
复制
sys.argv

返回已经导入的模块列表:

代码语言:javascript
复制
sys.modules.keys()

获取系统导入的模块字段:

代码语言:javascript
复制
sys.modules

key是模块名,value是模块

获取模块的搜索路径,初始化时使用PYTHONPATH环境变量的值:

代码语言:javascript
复制
sys.path

socket

socket是进程间通信的一个工具。下面看一下如何进行使用:

创建一个socket:

代码语言:javascript
复制
socket.socket(AddressFamily,Type)
# 用于UDP协议,数据报套接字,AddressFamily我们选用ipv4类型
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 用于TCP协议,基于字节流的套接字,AddressFamily我们选用ipv4类型
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

Address Family:IP地址类型;AFINET表示ipv4类型、AFINET6表示ipv6类型; Type:套接字类型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议)。

绑定端口:

代码语言:javascript
复制
udp_socket.bind((IP,端口号))
tcp_socket.bind((IP,端口号))

注意绑定时,IP和端口放在小括号里;IP的是一个字符串,如果填 ""空字符串表示绑定本机所有IP;端口号是int类型。

发送数据:

代码语言:javascript
复制
udp_socket.sendto(数据,指定地址)
tcp_socket.send(数据)

数据需要进行encode编码,指定地址是一个包含IP和端口的元组,同绑定端口时用到的地址。

接收数据:

代码语言:javascript
复制
recv_data = udp_socket.recvfrom(1024)
recv_data = tcp_socket.recv(1024)

1024是本次接收的最大字节数。

关闭套接字:

代码语言:javascript
复制
udp_socket.close()
tcp_socket.close()

TCP服务器用到的监听和接受连接:

tcp_server_socket是总服务器套接字,client_socket是创建出来服务客户端的临时套接字

代码语言:javascript
复制
# 设置监听
tcp_server_socket.listen(128)

使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的连接了。 128:表示最大等待连接数。

代码语言:javascript
复制
client_socket, clientAddr = tcp_server_socket.accept()

如果有新的客户端来连接服务器,那么就产生一个新的套接字专门为这个客户端服务。client_socket就是用来为这个客户端服务。 tcp_server_socket就可以省下来专门等待其他新客户端的链接。

threading

创建线程:

代码语言:javascript
复制
sub_thread = threading.Thread(target=任务函数名)

注意任务函数名不加括号。

开启创建的线程:

代码语言:javascript
复制
sub_thrad.start()

开启守护主线程:

代码语言:javascript
复制
# 守护主线程方式1:
sub_thread = threading.Thread(target=show_info,daemon=True)
# 守护主线程方式2:
sub_thread = threading.Thread(target=show_info)
sub_thread = setDaemon(True)

设置为守护主线程之后,主线程退出后子线程直接销毁不再执行子线程的代码。

主线程等待某一子线程执行完成后代码再往下执行:

代码语言:javascript
复制
子线程名称.join()

互斥锁

代码语言:javascript
复制
# 创建锁
mutex = threading.Lock()
# 锁定
mutex.acquire()
# 释放锁
mutex.release()

加上互斥锁后,哪个线程抢到这个锁我们决定不了,抢到锁的线程先执行,没有抢到锁的线程需要等待。 加上互斥锁多任务瞬间变成单任务,性能会下降,也就是说同一时刻只能有一个线程去执行。 使用互斥锁能够保证多个线程访问共享数据不会出现资源竞争及数据错误。 死锁:一直等待对方释放锁的情景就是死锁。

multiprocessing

创建子进程:

代码语言:javascript
复制
sub_process = multiprocessing.Process(target=run_proc)

启动子进程:

代码语言:javascript
复制
sub_process.start()

获取当前进程的编号:

代码语言:javascript
复制
current_process.pid

给子进程指定的函数传递参数:

代码语言:javascript
复制
sub_process = multiprocessing.Process(target=show_info, name="myprocess",args=("小闫同学", 18))

group:进程组,一般不用设置 target:执行目标函数名 name:进程名称 args:以元组的方式给函数传参 kwargs:以字典的方式给函数传参

创建消息队列:

代码语言:javascript
复制
queue = mltiprocessing.Queue(3)

3:表示队列中最大消息个数

为消息队列中放入数据:

代码语言:javascript
复制
queue.put(data)

data可以是任意数据类型。

如果队列满了,需要等待队列有空闲位置才能放入数据,否则一直等待。

代码语言:javascript
复制
queue.put()

如果队列满了,不需要等待队列有空闲位置,如果放入不成功直接崩溃。

代码语言:javascript
复制
queue.nowait()

查看队列是否满了:

代码语言:javascript
复制
queue.full()

查看队列是否空了:

代码语言:javascript
复制
queue.empty()

查看队列中的消息个数:

代码语言:javascript
复制
queue.qsize()

获取数据:

代码语言:javascript
复制
queue.get()

如果队列空了,再取值需要等待,只有队列有值以后才能获取队列中数据:

代码语言:javascript
复制
queue.get()

如果队列空了,不需要等待队列有值,直接崩溃:

代码语言:javascript
复制
queue.get_nowait()

创建进程池:

代码语言:javascript
复制
pool = multiprocessing.Pool(3)

3:进程池中进程的最大个数

同步执行任务,一个任务执行完成以后另外一个任务才能执行:

代码语言:javascript
复制
pool.apply(调用函数名)

异步执行任务,任务执行不会等待,多个任务一起执行:

代码语言:javascript
复制
pool.apply_async(调用函数名)

关闭进程池:

代码语言:javascript
复制
pool.close()

意思是告诉主进程以后不会有新的任务添加进来。

不管任务是否完成,立即终止:

代码语言:javascript
复制
pool.terminate()

主进程等待进程池执行完成以后程序再退出:

代码语言:javascript
复制
pool.join()

greentlet

greentlet:第三方模块,需要安装,创建协程。

创建协程并开启:

代码语言:javascript
复制
g1 = greenlet.greenlet(任务函数名)

切换到指定的协程,执行对应的任务:

代码语言:javascript
复制
g1.switch()

gevent

gevent:第三方模块,比上面的 greentlet(需要手动切换任务)要好,可以自动切换任务。

gevent内部封装的greenlet,其原理是当一个greenlet遇到IO(指的是input output 输入输出,比如网络、文件操作等)操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。 由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO

获取当前协程:

代码语言:javascript
复制
gevent.getcurrent()

创建协程并开启:

代码语言:javascript
复制
g1 = gevent.spawn(目标函数名,需要的参数)

等待指定协程执行完成:

代码语言:javascript
复制
g1.join()

实现真正的多任务,打补丁,让gevent框架识别耗时操作:

代码语言:javascript
复制
from gevent import monkey
monkey.patch_all()

re

re:此模块可以进行正则匹配。

根据正则表达式从头开始匹配字符串数据:

代码语言:javascript
复制
result = re.match(正则表达式,要匹配的字符串)

提取匹配到的数据:

代码语言:javascript
复制
result.group()

根据正则表达式查找数据,匹配出第一次出现的符合要求数据:

代码语言:javascript
复制
re.search(正则表达式,要匹配的字符串)

根据正则表达式查找数据,匹配出所有符合要求的数据:

代码语言:javascript
复制
re.findall(正则表达式,要匹配的字符串)

将匹配到的数据进行替换:

代码语言:javascript
复制
re.sub(正则表达式,替换后的字符串,要匹配的字符串,count=替换次数)

替换次数默认是全部替换,count可以指定次数,让程序根据指定次数替换。

根据匹配进行切割字符串,并返回一个列表:

代码语言:javascript
复制
re.split(正则表达式,要匹配的字符串,maxsplit=分割次数)

random

random:随机模块

生成一个0-1之间的随机浮点数:

代码语言:javascript
复制
random.random()

生成[a,b]之间的浮点数:

代码语言:javascript
复制
random.uniform(a,b)

生成[a,b]之间的整数:

代码语言:javascript
复制
random.randint(a,b)

在指定的集合[a,b)中,以step为间隔随机取一个数:

代码语言:javascript
复制
random.randrange(a,b,step)

time

time:时间模块

等待指定时间后,再执行操作:

代码语言:javascript
复制
time.sleep(时间)

返回当前时间的时间戳(1970纪元年经过的浮点秒数):

代码语言:javascript
复制
time.time()

优质文章推荐:

公众号使用指南

redis操作命令总结

前端中那些让你头疼的英文单词

Flask框架重点知识总结回顾

项目重点知识点详解

难点理解&面试题问答

flask框架中的一些常见问题

团队开发注意事项

浅谈密码加密

Django框架中的英文单词

Django中数据库的相关操作

DRF框架中的英文单词

重点内容回顾-DRF

Django相关知识点回顾

美多商城项目导航帖

项目重要技术点介绍

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 每日分享
  • python那些包
    • OS
      • sys
        • socket
          • threading
            • multiprocessing
              • greentlet
                • gevent
                  • re
                    • random
                      • time
                      相关产品与服务
                      消息队列 CMQ 版
                      消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档