广告
返回顶部
首页 > 资讯 > 后端开发 > Python >41. Python Queue 多进
  • 488
分享到

41. Python Queue 多进

Python多进Queue 2023-01-31 02:01:54 488人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

消息队列:消息队列是在消息传输过程中保存消息的容器。消息队列最经典的用法就是消费者和生产者之间通过消息管道来传递消息,消费者和生产生是不通的进程。生产者往管道中写消息,消费者从管道中读消息。相当于水管,有一个入口和出口,水从入口流入出口流出

消息队列

消息队列是在消息传输过程中保存消息的容器

消息队列最经典的用法就是消费者和生产者之间通过消息管道来传递消息,消费者和生产生是不通的进程。生产者往管道中写消息,消费者从管道中读消息。

image.png

相当于水管,有一个入口和出口,水从入口流入出口流出,这就是一个消息队列

线程或进程往队列里面添加数据,出口从队列里面读数据

左侧多线程往入口处添加完数据,任务就结束了;右侧只要依次从水管里取数据就行了。

异步完成的任务

比如京东下单,下单后付完钱,相当于把消息堆在了水管里,后台会有线程去接收这个单的消息,然后去库房,发货,走物流,直到接收货物并签收完,点击完成,整个流程才走完。

客户交完钱后,丢了个消息在这个队列中,会给客户返回一个结果,告知你已经买了这个商品;而后面接收订单消息,发货,物流都是后面的"进程"或"线程"干的事情。

所以,一般在异步处理问题时候,都会用到消息队列处理的这种思想。



使用multiprocessing里面的Queue来实现消息队列。

语法:

from mutliprocessing import Queue
q = Queue
q.put(data)
data = q.get(data)


举例:

from multiprocessing import Queue, Process

def write(q):
    for i in ['a','b','c','d']:
        q.put(i)
        print ('put {0} to queue'.fORMat(i))

def read(q):
    while 1:
        result = q.get()
        print ("get {0} from queue".format(result))


def main():
    q = Queue()
    pw = Process(target=write,args=(q,))
    pr = Process(target=read,args=(q,))
    pw.start()
    pr.start()
    pw.join()
    pr.terminate()  #停止
    # 相当于join,等pr完成以后,当whlie没有任何执行后,结束。

if __name__ == '__main__':
    main()

返回结果:

put a to queue
get a from queue
put b to queue
get b from queue
put c to queue
get c from queue
put d to queue
get d from queue


PIPE:

多进程里面有个pipe的方法来实现消息队列:

1. Pipe 方法返回(conn1, conn2)代表一个管道的两端。PIPE方法有个deplex参数,如果deplex参数为True(默认值),那么这个管道是全双工模式,也就是说conn1和conn2均可收发。duplex为False,conn1只负责接收消息,conn2负责发送消息。

2.send 和recv方法分别是发送和接受消息的方法。close方法表示关闭管道,当消息接收结束以后,关闭管道。

import time
from multiprocessing import Pipe, Process


def proc1(pipe):
    for i in xrange(1, 10):
        pipe.send(i)
        print ("send {0} to pipe".format(i))
        time.sleep(1)


def proc2(pipe):
    n = 9
    while n > 0:
        result = pipe.recv()
        print ("recv {0} from pipe".format(result))
        n -= 1



def main():
    pipe = Pipe(duplex=False)
    print (type(pipe))
    p1 = Process(target=proc1, args=(pipe[1],))
    p2 = Process(target=proc2, args=(pipe[0],)) #接收写0
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    pipe[0].close()
    pipe[1].close()


if __name__ == '__main__':
    main()


返回结果(逐行打印):

<type 'tuple'>
send 1 to pipe
recv 1 from pipe
recv 2 from pipe
send 2 to pipe
send 3 to pipe
recv 3 from pipe
recv 4 from pipe
send 4 to pipe
send 5 to pipe
recv 5 from pipe
recv 6 from pipe
send 6 to pipe
recv 7 from pipe
send 7 to pipe
recv 8 from pipe
send 8 to pipe
send 9 to pipe
recv 9 from pipe


--结束END--

本文标题: 41. Python Queue 多进

本文链接: https://www.lsjlt.com/news/186782.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 41. Python Queue 多进
    消息队列:消息队列是在消息传输过程中保存消息的容器。消息队列最经典的用法就是消费者和生产者之间通过消息管道来传递消息,消费者和生产生是不通的进程。生产者往管道中写消息,消费者从管道中读消息。相当于水管,有一个入口和出口,水从入口流入出口流出...
    99+
    2023-01-31
    Python 多进 Queue
  • python 多线程+queue
    python的queue设计的是线程安全的,所以大家伙放心用吧! python多线程的一种简单的实现如下: #!/usr/bin/env python # -*- coding: utf-8 -*- import threadi...
    99+
    2023-01-31
    多线程 python queue
  • 简单谈谈python中的Queue与多进程
    最近接触一个项目,要在多个虚拟机中运行任务,参考别人之前项目的代码,采用了多进程来处理,于是上网查了查python中的多进程 一、先说说Queue(队列对象) Queue是python中的标准库,可以直接i...
    99+
    2022-06-04
    进程 简单 python
  • thinkPHP/fastadmin topthink/think-queue 多进程
    运行环境centos7.6 lnmp 1,安装redis扩展和安装topthink/think-queue(fastadmin自带) 2,新增配置文件application/extra/queue.p...
    99+
    2023-08-31
    php redis
  • Python多线程 Queue 模块常见用法
    queue介绍 queue是python中的标准库,俗称队列,可以直接import 引用,在python2.x中,模块名为Queue 在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够...
    99+
    2022-06-02
    Python Queue 模块 Python多线程
  • Python多线程中Queue模块怎么用
    这篇文章将为大家详细讲解有关Python多线程中Queue模块怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。queue介绍queue是python中的标准库,俗称队列,可以直接import 引用,在...
    99+
    2023-06-20
  • Python中使用Queue和Condition进行线程同步的方法
    Queue模块保持线程同步 利用Queue对象先进先出的特性,将每个生产者的数据一次存入队列,而每个消费者将依次从队列中取出数据 import threading # 导入threading模块...
    99+
    2022-06-04
    线程 方法 Python
  • Python 多进程
    #_*_coding:utf-8_*_ __author__ = 'jieli' import time import multiprocessing ''' 线程多锁是不需要当成参数传多,因为线程之间是共享内存多。 但是进程之间多锁...
    99+
    2023-01-31
    进程 Python
  • python多进程
    第一种开启进程方式#!/usr/bin/python # -*- coding:utf-8 -*- from multiprocessing import Process import time, random, os # print(o...
    99+
    2023-01-31
    进程 python
  • Python -- 多进程
    进程通信 方式一、共享内存(进程安全,效率高) 共享变量:multiprocessing.Value共享数组:multiprocessing.Array  方式二、Manager对象: Mananger 包括:list, dict, Na...
    99+
    2023-01-31
    进程 Python
  • python-----05(多进程)
    join:和多线程一样,也是等待的意思。如下图,如没有join则会独立运行。 Rlock.p:创建锁。 with:会自己帮你关掉。 path:路径。 mode:模式a(追加)。 encoding:编码模式:utf-8, gbk,g...
    99+
    2023-01-31
    进程 python
  • python之多进程
    一、multiprocessing模块 python中的多线程无法利用多核优势,如果想要充分地使用多核cpu的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程。python提供了multiprocessi...
    99+
    2023-01-30
    之多 进程 python
  • python多进程—multiproce
    一、进程    python中提供多进程包:multiprocessing,支持子进程,通信,共享内存,执行不同形式的同步,提供了Process、Pipi、Lock等组件    多进程和多线程区别:  多线程使用的是CPU的一个核,适合IO...
    99+
    2023-01-31
    进程 python multiproce
  • python fork()多进程
    一、理解fork() fork()是一个绝对唯一的调用。Python中的大多数函数会之返回一次,因为sys.exit()会终止程序,所以它就不会返回。相比之下,Python的os.fork()是唯一返回两次的函数,任何返回两次的函数,在某...
    99+
    2023-01-31
    进程 python fork
  • python socket多线程和多进程
    在socket中,如果直接创建的话,是只能接受一个用户的请求需要实现socketserver中的handle方法,可以实现多进程并发访问 SocketServer内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理...
    99+
    2023-01-31
    多线程 进程 python
  • python之多线程与多进程
    1. 多进程与多线程 (1)背景:为何需要多进程或者多线程:在同一时间里,同一个计算机系统中如果允许两个或者两个以上的进程处于运行状态,这便是多任务。多任务会带来的好处例如用户边听歌、边上网、边打印,而这些任务之间丝毫不会互相干扰。使用多...
    99+
    2023-01-31
    之多 线程 进程
  • python多线程和多进程(二)
    ---恢复内容开始--- 一、多进程   1、multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似。 import time from mult...
    99+
    2023-01-30
    多线程 进程 python
  • 38. Python 多进程Manag
    强大的Manager模块上一节实现的数据共享的方式只有两种结构Value和Array。Python中提供了强大的Manager模块,专门用来做数据共享。他支持的类型非常多,包括:Value、Araay、list、dict、Queue、Loc...
    99+
    2023-01-31
    进程 Python Manag
  • python多进程--交互
    1.管道使用 ''' 管道Pipe ''' from multiprocessing import Process,Pipe def f(conn): conn.send('child message')#给主进程发送消息 ...
    99+
    2023-01-31
    进程 python
  • python多进程编程
    最近开始学习PYTHON编程语言,详细参照《python绝技运用Python成为顶级***》。在学习过程第一章节中,编写破解LINUX shadow文件时,想利用多线程加快破解速度。主机运行环境为WINDOWS下的VM WORKSTATIO...
    99+
    2023-01-31
    进程 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作