1、Python多线程
import threading
import time
def run(n):
print("task", n)
time.sleep(10)
if __name__ == '__main__':
//特别注意:不能写成threading.Thread(target=run("t1")),否则还是单线程
t1 = threading.Thread(target=run, args=("t1",))
t2 = threading.Thread(target=run, args=("t2",))
t1.start()
t2.start()
===============================
Python多线程写法
def countrow(currentday):
print(currentday)
for date in date_list:
while True:
thread_count = len(threading.enumerate())
if thread_count < 5:
# t = threading.Thread(target=countrow("多线程")) 这样子并不会起多线程
t = threading.Thread(target=self.countrow, args=(date, "11")) #不能只传1一个参数,否则报错:”countrow() argument after * must be an iterable, not datetime.datetime“
t.start()
break
else:
time.sleep(5)
2、pip是常用的python包管理工具,类似于java的maven
3、docker
- 1)Docker 在容器的基础上,进行了进一步封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker技术比虚拟机技术更为轻便、快捷
- 2)Docker 包括三个基本概念 ● 镜像(Image) ● 容器(Container) ●仓库(Repository) 仓库就是装存储镜像的地方
- 3)镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等
- 4)将flask应用部署在docker中
* 创建requirements.txt, Dockerfile
* docker build -t “cv2es” .
* docker run -it --rm -p 8888:8888 cv2es
4、Python有五个标准的数据类型:
● Numbers(数字)
● String(字符串)
截取子字符串:str=“laojingyao”;
name=str[0:3]
name2 = str[3:] #从第三位开始截到最后一位
● List(列表)
用[]标识。有序。不管是list还是string,从左到右索引默认 0 开始,从右到左索引默认 -1 开始
创建一个list: lst = list()或者lst = []
● Tuple(元组)
元组用"()"标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。
● Dictionary(字典)
K-V形式,即json
5、三引号’’’
如果一个字符串有很多特殊字符,一个一个转义是十分麻烦的。用三引号引起来,可以保证所见即所得,不需要加转义字符
6、python的dict其实就是json,如果想要转换dict和json字符串,用json包的下面的方法:
1)json.dumps(dict) 将dict转换为json字符串
2) json.loads(json) 将json字符串转换为dict
dict取值的两种方式:
1)dict.get("foo") //如果key不存在,不会报错,返回None
2) dict["foo"] //如果key不存在,会报错
7、def init(self):
相当于java的构造函数,在初始化类的时候会默认执行的方法。可传参数,也可不传
8、python读取大文件
with open(path) as f:
#文件对象f视为一个迭代器,会自动的采用缓冲IO和内存管理
for line in f:
每行操作
9、python yield
顺序访问容器内的前 5 个元素,可以有两种做法:
● 获取容器内的所有元素,然后取出前 5 个;
● 从头开始,逐个迭代容器内的元素,迭代 5 个元素之后停止。
显而易见,如果容器内的元素数量非常多(比如有 10 ** 8 个),那么后一种方案能节省巨大的时间、空间开销。
1)带有 yield 的函数不再是一个普通函数,而是一个生成器generator,可用于迭代,工作原理同上。
2)yield就是 return 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后(下一行)开始
10、sys.path.append(os.path.abspath("."))
将当前脚本的运行路径设置为主目录,比如运行主目录下的/bin/app.py,然后在app.py里面会import 目录fpBaseMongo下的fp2mongo.py,那么fp2mongo.py默认的运行路径为"主目录/bin", 通过sys.path.append(os.path.abspath("."))将fp2mongo.py运行路径统一为主目录,防止错乱
11、type为python的保留字,程序里面变量的定义一定不要声明为type!!!否则,如果你使用type()函数判断某个变量的类型时,会出错