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

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

作者: TheRightPath1 | 来源:发表于2020-03-01 18:25 被阅读0次

1. 进程间与线程间通信区别

(1)线程间通信的类与锁在进程间是不适用的,必须使用multiprocessing中的queue.
(2)共享全局变量的方式也不适用. 因为在多进程中每个进程间的数据都是独立的, 进程会将相同的变量复制一份用到自己的进程中.
(3)multiprocessing中的queue不能用于进程池中进程间的通信, 如果使用的话代码不会运行
(4)进程池中进程间的通信需要使用multiprocessing中的Manager类,Manager类实例化以后会有一个Queue,需要使用这个Queue进行通信

2. 使用pipe进行进程间的通信

pipe的通信只能适用于两个进程的通信, 并且pipe的通信效率要高于Queue,因为Queue中为了能够进程同步添加了许多的锁.

代码示例\

import time
import multiprocessing


def send_data(pipe):
    # 向pipe中发送数据
    pipe.send('test_data')


def recv_data(pipe):
    # 接收pipe中的数据
    print(pipe.recv())


if __name__ == '__main__':
    # pipe通信需要有两个, 一个用来发送,一个用来接收
    receive_pipe, send_pipe = multiprocessing.Pipe()
    p1 = multiprocessing.Process(target=send_data, args=(send_pipe,))
    p2 = multiprocessing.Process(target=recv_data, args=(receive_pipe,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

3.使用Manager类进行python间进程共享内存

代码示例

import multiprocessing


def add_data(p_dict, key, value):
    p_dict[key] = value


if __name__ == '__main__':
    # 通过Manager()类中的dict实现两个进程共享一个字典
    p_dict = multiprocessing.Manager().dict()
    p1 = multiprocessing.Process(target=add_data, args=(p_dict, 'key1', 'value1'))
    p2 = multiprocessing.Process(target=add_data, args=(p_dict, 'key2', 'value2'))
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    print(p_dict)

相关文章

  • linux进程间通信(1)

    一、进程通信概述 1、什么是进程间通信?什么是线程间通信? 进程间通信: 进程间通信就指的是用户空间中进程A与进程...

  • Android 面试常问知识

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

  • python高级 6 进程

    进程、进程的使用、进程注意点、进程间通信-Queue、进程池Pool、进程与线程对比、文件夹拷贝器-多任务 1.进...

  • ios 多线程的故事4

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

  • 浏览器运行原理

    进程 申请和拥有计算机资源 不同进程间通信通过进程间通信管道IPC 线程 一个进程多个线程,每个线程执行不同的任务...

  • iOS进程间通信

    线程间通信 :通过performSelector系列的方法 可以实现 各种线程间的通信(通信 :调用与传参)进程间...

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

    1. 进程间与线程间通信区别 (1)线程间通信的类与锁在进程间是不适用的,必须使用multiprocessing中...

  • 8.进程间通信与进程池

    进程间通信与进程池 进程间通信-Queue 通常利用multiprocessing模块的Queue实现多线程之间的...

  • 【python】进程间通信:Queue的详细用法

    关于python 进程间通信 Process之间有时需要通信,操作系统提供了很多机制来实现进程间的通信。 进程间通...

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

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

网友评论

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

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