day8通信和线程池进程池总结
一、线程间通信
1.线程间通信
同一个进程中的多个线程可以直接通信(一个线程可以直接使用另外一个线程中产生的数据)
通信原则:使用全局变量
from threading import Thread, current_thread
# 导入线程队列
from queue import Queue
import time
from random import randint
# ======================案例1=============================
# def sum1(x, y):
# # z是第一个子线程定义的全局变量
# global z
# z = x + y
# print(current_thread(), a)
#
# def func2():
# print(current_thread(), z, a)
#
# if __name__ == '__main__':
# # a是在主线程中定义的全局变量
# a = 100
#
# t1 = Thread(target=sum1, args=(10, 20))
# t1.start()
#
# t1.join()
#
# t2 = Thread(target=func2)
# t2.start()
#
# print('主线程:', current_thread(), z)
# ======================案例2 - 收集其他线程产生的数据 ============================
# def download(name):
# # print(f'{name}数据')
# time.sleep(randint(2, 7))
# all_data.append(f'{name}数据')
#
#
# if __name__ == '__main__':
# # 定义全局列表
# all_data = []
#
# # 创建子线程同时下载多个电影数据
# names = ['电影1', '电影2', '电影3', '电影4']
# ts = []
# for name in names:
# t = Thread(target=download, args=(name,))
# t.start()
# ts.append(t)
#
# # 等到所有电影都下载结束后,在主线程中处理下载得到的数据
# for t in ts:
# t.join()
#
# print(all_data)
# ======================案例3 - 使用线程队列 ==========================
def download(name):
#