python 多线程

python

import threading

import time

# 通过函数方法创建多线程

def run(n):

print('%s 线程开始了' % threading.current_thread().name)

time.sleep(n)

print('%s 线程结束了' % threading.current_thread().name)

if __name__ == '__main__':

print('主线程开始执行:', threading.current_thread().name)

s_time = time.time()

# 创建thread对象,target传入线程执行的函数,args传参数

t1 = threading.Thread(target=run, args=(1,)) # Python 元组语法规定,当 (object,) 元组中只有一个元素时,最后的逗号(,)不能省略

t2 = threading.Thread(target=run, args=(2,))

t3 = threading.Thread(target=run, args=(3,))

# 使用start()开始执行

t1.start()

t2.start()

t3.start()

# 使用join()来完成线程同步

t1.join()

t2.join()

t3.join()

print('主线程执行结束', threading.current_thread().name)

print('一共用时:', time.time() - s_time)

"""

主线程开始执行: MainThread

Thread-1 线程开始了

Thread-2 线程开始了

Thread-3 线程开始了

Thread-1 线程结束了

Thread-2 线程结束了

Thread-3 线程结束了

主线程执行结束 MainThread

一共用时: 3.004350185394287

"""

二、通过继承的方式创建多线程

import threading

import time

# 通过继承方式创建多线程

class MyThread(threading.Thread):

def __init__(self, n):

super(MyThread, self).__init__()

self.n = n

# 重写run方法

def run(self):

print('%s 线程开始了' % threading.current_thread().name)

time.sleep(self.n)

print('%s 线程结束了' % threading.current_thread().name)

if __name__ == '__main__':

print('主线程开始执行', threading.current_thread().name)

s_time = time.time()

# 实例化MyThread对象

t1 = MyThread(1)

t2 = MyThread(2)

t3 = MyThread(3)

# 实例化后调用 start() 方法启动新线程,即它调用了线程的 run() 方法

t1.start()

t2.start()

t3.start()

# 使用join()来完成线程同步

t1.join()

t2.join()

t3.join()

print('一共用时:', time.time() - s_time)

print('主线程结束执行', threading.current_thread().name)

"""

主线程开始执行 MainThread

Thread-1 线程开始了

Thread-2 线程开始了

Thread-3 线程开始了

Thread-1 线程结束了

Thread-2 线程结束了

Thread-3 线程结束了

一共用时: 3.002850294113159

主线程结束执行 MainThread

"""

线程锁

import threading

import time

'''

某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;

直到该线程释放资源,将资源的状态变成“非锁定”,其他的线程才能再次锁定该资源。

互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的正确性。

lock = threading.Lock() # 获取锁

lock.acquire() # 上锁

lock.release() # 解锁

'''

num = 0

lock = threading.Lock() # 获取锁

def method1(count):

global num

for i in range(count):

lock.acquire() # 上锁

temp = num

num = temp + 1

lock.release() # 解锁

print(num)

def method2(count):

global num

for i in range(count):

lock.acquire()

temp = num

num = temp + 1

lock.release()

print(num)

if __name__ == '__main__':

t1 = threading.Thread(target=method1, args=(1000,))

t2 = threading.Thread(target=method2, args=(1000,))

t1.start()

t2.start()

while len(threading.enumerate()) != 1: # 线程数量

time.sleep(1)

print(num)

"""

1000

2000

2000

"""

以上是 python 多线程 的全部内容, 来源链接: utcz.com/z/389045.html

回到顶部