Python之多线程编程2,线程间的通信
1、通过全局变量线程间通信
- 创建全局变量
value=[]
- 创建函数调用全局变量
#向列表队尾追加元素
def function_append(n, threadname):
global value
print(f"运行线程为:{threadname},value的值为{value}")
for i in range(n):
value.append(i)
print(f"添加后value的值为{value}")
#向列表队尾删除元素
def function_pop(n,threadname):
global value
print(f"运行线程为:{threadname},value的值为{value}")
for i in range(n):
value.pop()
print(f"删除最后一个元素后value的值为{value}")
- 主函数实现
if __name__=="__main__":
print(f"value的初始值为{value}")
thread1 = threading.Thread(target=function_append, args=[5, "thread1"])
thread2 = threading.Thread(target=function_pop, args=[5,"thread2"])
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print(f"最终value的值为{value}")
运行结果:
2、通过Queue库实现线程通信
- 导入queue库
from queue import Queue
- 在主函数定义 queue对象
maxsize属性为queue队列的最大线程值
myqueue = Queue(maxsize=100)
- 两个线程函数的编写
def function_put(queue, threadname):
print(f"运行线程为:{threadname}")
for i in range(3):
time.sleep(3)
queue.put(f"这是一个网址/{i}")
print(f"结束线程{threadname}\n")
# print(f"添加后value的值为{queue.get()}\n")
def function_get(queue, threadname):
while True:
print(f"运行线程为:{threadname}")
print(f"获取queue的值为{queue.get()}")
- 主函数编写
if __name__ == "__main__":
myqueue = Queue(maxsize=100)
thread1 = threading.Thread(target=function_put, args=[myqueue, "thread1"])
thread2 = threading.Thread(target=function_get, args=[myqueue, "thread2"])
thread1.start()
thread2.start()
thread1.join()
thread2.join()
运行结果: