多线程
程序同时执行多个任务
-
使用线程可以把占据长时间的程序中的任务放到后台去处理。
-
程序的运行速度可能加快
一、
def demo1():
for i in range(5):
print("demo1:",i)
def demo2():
for i in range(5):
print("demo2:",i)
if __name__ == '__main__':
demo1()
demo2()
import threading
def demo1():
for i in range(5):
print("demo1在执行:", i)
def demo2():
for i in range(5):
print("demo2在执行:", i)
def main():
t1 = threading.Thread(target=demo1, name="demo1")
t2 = threading.Thread(target=demo2, name="demo2")
t1.start()
t2.start()
if __name__ == '__main__':
main()
from threading import Thread
class Thread_Spider1(Thread):
def run(self):
for i in range(5):
print("子线程开始执行", i)
class Thread_Spider2(Thread):
def run(self):
for i in range(5):
print("子线程开始执行", i)
if __name__ == '__main__':
t1 = Thread_Spider1()
t1.start()
t2 = Thread_Spider2()
t2.start()
for i in range(5):
print("主线程:", i)
描述 | |
---|---|
threading.current_thread() | 获取当前线程对象 |
threading.enumerate() | 获取当前线程的信息 |
getName() | 获取线程名称 |
setName(name) |
import threading
class Thread_Spider1(threading.Thread):
def run(self):
thread = threading.current_thread()
print(thread)
# <Thread_Spider1(Thread-1, started 9172)>
for i in range(5):
print("子线程开始执行", i)
class Thread_Spider2(threading.Thread):
def run(self):
thread = threading.current_thread()
print(thread)
# <Thread_Spider2(Thread-2, started 1304)>
for i in range(5):
print("子线程开始执行", i)
if __name__ == '__main__':
t1 = Thread_Spider1()
t1.start()
t2 = Thread_Spider2()
t2.start()
for i in range(5):
print("主线程:", i)
-----------------------------
<Thread_Spider(Thread-1, started 7936)>
子线程1开始执行 0
<Thread_Spider2(Thread-2, started 15784)>主线程:
子线程2开始执行 0
0
子线程1开始执行子线程2开始执行主线程: 1
1
1
子线程2开始执行子线程1开始执行主线程: 2
2
2
子线程1开始执行子线程2开始执行主线程: 3 3
3
子线程2开始执行主线程: 44
子线程1开始执行
4
import threading
class Thread_Spider1(threading.Thread):
def run(self):
for i in range(5):
print("子线程开始执行", i)
class Thread_Spider2(threading.Thread):
def run(self):
for i in range(5):
print("子线程开始执行", i)
if __name__ == '__main__':
t1 = Thread_Spider1()
t1.start()
t2 = Thread_Spider2()
t2.start()
print(threading.enumerate())
# [<_MainThread(MainThread, started 3088)>, <Thread_Spider1(Thread-1, started 9040)>, <Thread_Spider2(Thread-2, started 6376)>]
for i in range(5):
print("主线程:", i)
---------------------------------------------------------
子线程1开始执行 0
子线程2开始执行[<_MainThread(MainThread, started 7764)>, <Thread_Spider(Thread-1, started 19600)>, <Thread_Spider2(Thread-2, started 13336)>]
主线程: 0
0
子线程1开始执行子线程2开始执行主线程: 1
1
1
子线程1开始执行子线程2开始执行 主线程:2
2
2
子线程1开始执行子线程2开始执行 3主线程:3
3
子线程1开始执行子线程2开始执行主线程: 4
4
4
import threading
class Thread_Spider1(threading.Thread):
def run(self):
thread = threading.current_thread()
print(thread)
print("线程名称:", thread.getName())
thread.setName("我的子线程")
print("修改后的名称:", thread.getName())
for i in range(5):
print("子线程开始执行", i)
if __name__ == '__main__':
t1 = Thread_Spider1()
t1.start()
print(threading.enumerate())
for i in range(5):
print("主线程:", i)
import threading
num = 100
def func1():
for i in range(200):
global num
if num > 0:
print("func1-正在输出{}".format(num))
num -= 1
def func2():
for i in range(200):
global num
if num > 0:
print("func2-正在输出{}".format(num))
num -= 1
def func3():
for i in range(200):
global num
if num > 0:
print("func3-正在输出{}".format(num))
num -= 1
def start():
t1 = threading.Thread(target=func1)
t1.start()
t2 = threading.Thread(target=func2)
t2.start()
t3 = threading.Thread(target=func2)
t3.start()
if __name__ == '__main__':
start()
import threading
num = 100
lock = threading.Lock()
def func1():
for i in range(200):
global num
lock.acquire()
if num > 0:
print("func1-正在输出{}".format(num))
num -= 1
lock.release()
def func2():
for i in range(200):
global num
lock.acquire()
if num > 0:
print("func2-正在输出{}".format(num))
num -= 1
lock.release()
def func3():
for i in range(200):
global num
lock.acquire()
if num > 0:
print("func3-正在输出{}".format(num))
num -= 1
lock.release()
def start():
t1 = threading.Thread(target=func1)
t1.start()
t2 = threading.Thread(target=func2)
t2.start()
t3 = threading.Thread(target=func2)
t3.start()
if __name__ == '__main__':
start()