入门python(第九篇)多线程
2022-08-29 本文已影响0人
小黄不头秃
(一) 线程模块 threading
python3 通过两个标准库_thread 和 threading 提供对线程的支持。
threading模块常用方法:
- threading.currentThread():返回当前的线程变量
- threading.enumerate():返回一个包含正在运行的线程的list。正在运行的线程之线程启动后,结束前,不包括启动前和终止后的线程。
- threading.activeCount():返回正在运行的现成的数量,与len(threading.enumerate())有相同的结果。
线程的生命周期
线程的一些状态:
1、新建:创建线程对象
2、就绪:线程有执行资格,没有执行权
3、运行:有执行资格,有执行权
4、阻塞:由于一些操作让线程改变了状态,没有执行资格,没有执行权
另一些操作可以把它给激活,激活处于就绪状态
5、死亡:线程对象变成垃圾,等待被回收
import threading
from time import sleep
def fun1(a):
for i in range (20):
print(i)
sleep(a)
def fun2(a):
for i in range (65,80):
print(chr(i))
sleep(a)
# 创建一个线程
thread1 = threading.Thread(target=fun1,args=(1,))
thread2 = threading.Thread(target=fun2,args=(1,))
# 运行线程
thread1.start()
thread2.start()
from ast import arg
import threading
from time import sleep
def fun1(a):
for i in range (5):
print(i)
sleep(a)
# print("threading num:",threading.activeCount())
def fun2(a):
for j in range (65,70):
print(chr(j))
sleep(a)
# print("threading num:",threading.activeCount())
class Mythread(threading.Thread):
def __init__(self,a,fun):
super().__init__(args=(a,))
self.a = a
self.fun = fun
def run(self):
self.fun(self.a)
t1 = Mythread(0.8,fun1)
t2 = Mythread(0.8,fun2)
t1.start()
t2.start()
join功能:就是让主线程去等待子线程执行完,再接下去执行。
import threading
from time import sleep
def fun1(a):
for i in range (20):
print(i)
sleep(a)
if i == 5:
thread2 = threading.Thread(target=fun2,args=(1,))
thread2.start()
thread2.join()
def fun2(a):
for i in range (65,70):
print(chr(i))
sleep(a)
# 创建一个线程
thread1 = threading.Thread(target=fun1,args=(0.5,))
# 运行线程
thread1.start()
lock:在线程中,有一些资源是共享的。多个线程之间可能会出现同时使用资源的时候。可以给数据加把锁,来防止脏读,等。比较经典的就是生产者,消费者模型,可以去了解一下。
import threading
from time import sleep
ticket = 10
lock = threading.Lock()
def sell():
global ticket
global lock
lock.acquire()
while ticket>=0:
print("ticket number:",ticket)
ticket-=1
sleep(0.1)
lock.release()
for i in range(3):
thread = threading.Thread(target=sell)
thread.start()
使用python打印时间。
最重要的是将时间继续格式化
- time.strftime("%Y-%m-%d %H:%M:%S",time.localtime)
- time.strftime("%a %b %d %H:%M:%S %Y",time.localtime)
- time.mktime(time.strftime("%a %b %d %H:%M:%S %Y",time.localtime)) # 时间戳
import time
print(time.localtime())
print(time.asctime( time.localtime())) # 格式化
import time
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
print(time.strftime("%a %b %d %H:%M:%S %Y",time.localtime()))
print(time.mktime(time.localtime())) # 时间戳