1、线程:threading,能够完成多任务,比如一个QQ中多个聊天窗口。(轻量级)
在同一时间分批量去做很多事情。减少运算时间。
import threading
def thread_job():
print('this is an added Threaf,number is %s' % threading.current_thread())
def main():
add_thread = threading.Thread(target = thread_job) # 添加一个线程
add_thread.start() # 运行线程
print(threading.active_count()) # 计算有多少激活的线程
print(threading.enumerate()) # 输出激活的线程都有那几个
print(threading.current_thread()) # 输出现在正在运行的线程
if __name__ == '__main__()':
main()
`多线程中的join,想要所有线程的任务都结束,最后在输出print(‘all done\n'),则需要用到join。
import threading
def thread_job():
print('T1 start\n')
for i in range(10):
time.sleep(0.1)
print('T1 finish\n')
def main():
add_thread = threading.Thread(target = thread_job, name = 'T1') # 给线命名为T1
add_thread.start() # 运行线程
add_thread.join()
print(‘all done\n')
if __name__ == '__main__()':
main()
多线程的运算结果是没有返回值的,所以需要把多线程的运算结果放入到队列中,然后到主线程中再拿出来进行计算。用到Queue.
inmport threading
import time
from queue import Queue
def job(l):
for i in range(len(l)):
l[i] = l[i]**2
return l
def multithreading(data):
q = Queue() # 计算出来的返回值放入到q中,替代return的功能
threads = []
data = [[1,2,3],[3,4,5],[4,4,4],[5,5,5]]
for i in range(4): # 定义4个线程
t = threading.Thread(target = job, args = (data[i]),q)
t.start()
threads.append(t)
for thread in threads:
thread.join() # 加载到主线程,等所有线程运行完在返回运行值
result = []
for _ in range(4):
# 每次按顺序拿出一个值
result.append(q.get())
print(result)
def __name__ == '__main__()':
multithreading()
2、进程:能够完成多任务,比如一台电脑上可以运行多个QQ。(资源以及代码的总称,先有进程最后才有线程,进程:资源分配的单位,线程:操作系统调度的单位)线程拿着资源组合进行运行。会造成资源浪费。
3、多线程运行图:
4、开始运行多个线程,线程之间相互不影响,则需要添加lock
定义:lock = threading.Lock()
程序开始:lock.aquire();
程序结束:lock.release()