美文网首页
python进线程——线程间的通信

python进线程——线程间的通信

作者: TheRightPath1 | 来源:发表于2020-02-28 15:09 被阅读0次

1. 共享全局变量

多个线程之间可以通过共用一个全局变量(如列表)来通信, 一个线程负责往里面放任务,另一个线程负责消耗任务.
如果被共享的变量与运行的程序不在同一个文件中,从另一个文件中导入变量的时候一定要import 文件名, 之后通过文件名.变量的方式引用共享变量. 尽量不要直接from 文件名 import 变量名
当对共享变量进行操作时应该使用Lock将操作步骤acquire,执行完成以后将锁release, Lock只允许acquire一次,必须release以后才能继续acquire. 而Rlock允许在同一个线程之中多次acquire,但acquire的次数必须和release的次数相同

注: 由于线程间的安全问题,共享全局变量的方式进行线程通信必然会导致共享变量出错,此时就必须加锁导致代码更加繁琐,因此不建议使用该方式进行线程通信

2. 使用Queue进行线程通信

Queue本身就是线程安全的数据结构, 因此不用担心线程往里面存、取数据导致数据出错. 其底层是使用deque
使用方式为: 一个线程负责往Queue中存入任务,另一个线程负责消耗任务,此时两个线程之间的共享变量变为Queue.
Queue的部分方法介绍:
get(): 获取Queue中的一条数据,该方法是会阻塞的,如果Queue中没有数据那么会一直停在这里
put(): 往Queue中存入一条数据,如果Queue已满,那么会阻塞
qsize(): 获取Queue的长度
empty(): 判断Queue是否为空
full(): 判断Queue是否已满
put_nowait(): 与put方法相同,只是不阻塞,会立刻返回结果.可以设置put方法的block参数实现
get_nowait(): 与get方法相同,只是不阻塞,会立刻返回结果.可以设置get方法的block参数实现
join和task_done方法: join方法可以从Queue的角度阻塞整个程序的运行,直到Queue收到一个task_done方法的信号才会退出程序. task_done放法要写在join方法之前.

相关文章

  • Python多线程

    目录:一、线程的创建二、多线程互斥锁三、线程间通信四、线程池 Python并发之多线程 一、线程的创建 单线程示例...

  • ios 多线程的故事4

    线程间通信 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个...

  • 线程间通信

    线程间通信就是子线程和主线程之间的通信

  • 《iOS高级开发之多线程编程之二》

    线程间的通信 在一个进程中,线程往往不是孤立存在的,多个线程之间经常进行通信,称为线程间通信。 NSThread ...

  • 多线程之iOS线程间通信

    什么叫做线程间通信在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传...

  • Android 面试常问知识

    Q1:线程间的通信进程间通信的几种方式进程间通信方式详解Q2:线程安全SharePreferences 是否线程安...

  • python进线程——线程间的通信

    1. 共享全局变量 多个线程之间可以通过共用一个全局变量(如列表)来通信, 一个线程负责往里面放任务,另一个线程负...

  • iOS开发多线程--线程通信

    线程之间的通信 简单说明线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信。 线程间通...

  • 2.Java内存模型

    1.java并发编程的线程间通信及线程间如何同步线程间通信分为:共享内存,消息传递。线程间同步:共享内存是代码指定...

  • 线程优先级队列

    Queue模块可以用来进行线程间的通信,让各个线程之间共享数据Python的Queue模块提供了同步、线程安全的队...

网友评论

      本文标题:python进线程——线程间的通信

      本文链接:https://www.haomeiwen.com/subject/jvlthhtx.html