美文网首页
入门python(第九篇)多线程

入门python(第九篇)多线程

作者: 小黄不头秃 | 来源:发表于2022-08-29 00:31 被阅读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())) # 时间戳

相关文章

网友评论

      本文标题:入门python(第九篇)多线程

      本文链接:https://www.haomeiwen.com/subject/nawtnrtx.html