当前位置: 首页 > news >正文

学做宝宝辅食的网站/怎么做公众号

学做宝宝辅食的网站,怎么做公众号,外网设计素材网站,硬件外包平台多进程通信 queue和pipe的区别: pipe用来在两个进程间通信。queue用来在多个进程间实现通信。 此两种方法为所有系统多进程通信的基本方法,几乎所有的语言都支持此两种方法。 1)Queue & JoinableQueue queue用来在进程间传递消息&#xf…

 

多进程通信

queue和pipe的区别: pipe用来在两个进程间通信。queue用来在多个进程间实现通信。 此两种方法为所有系统多进程通信的基本方法,几乎所有的语言都支持此两种方法。

 

1)Queue & JoinableQueue

queue用来在进程间传递消息,任何可以pickle-able的对象都可以在加入到queue。 

multiprocessing.JoinableQueue 是 Queue的子类,增加了task_done()和join()方法。

 

task_done()用来告诉queue一个task完成。一般地在调用get()获得一个task,在task结束后调用task_done()来通知Queue当前task完成。

join() 阻塞直到queue中的所有的task都被处理(即task_done方法被调用)。

 

代码:

复制代码
import multiprocessing
import time

class Consumer(multiprocessing.Process):
    
    def __init__(self, task_queue, result_queue):
        multiprocessing.Process.__init__(self)
        self.task_queue = task_queue
        self.result_queue = result_queue

    def run(self):
        proc_name = self.name
        while True:
            next_task = self.task_queue.get()
            if next_task is None:
                # Poison pill means shutdown
                print ('%s: Exiting' % proc_name)
                self.task_queue.task_done()
                break
            print ('%s: %s' % (proc_name, next_task))
            answer = next_task() # __call__()
            self.task_queue.task_done()
            self.result_queue.put(answer)
        return


class Task(object):
    def __init__(self, a, b):
        self.a = a
        self.b = b
    def __call__(self):
        time.sleep(0.1) # pretend to take some time to do the work
        return '%s * %s = %s' % (self.a, self.b, self.a * self.b)
    def __str__(self):
        return '%s * %s' % (self.a, self.b)


if __name__ == '__main__':
    # Establish communication queues
    tasks = multiprocessing.JoinableQueue()
    results = multiprocessing.Queue()
    
    # Start consumers
    num_consumers = multiprocessing.cpu_count()
    print ('Creating %d consumers' % num_consumers)
    consumers = [ Consumer(tasks, results)
                  for i in range(num_consumers) ]
    for w in consumers:
        w.start()
    
    # Enqueue jobs
    num_jobs = 10
    for i in range(num_jobs):
        tasks.put(Task(i, i))
    
    # Add a poison pill for each consumer
    for i in range(num_consumers):
        tasks.put(None)

    # Wait for all of the tasks to finish
    tasks.join()
    
    # Start printing results
    while num_jobs:
        result = results.get()
        print ('Result:', result)
        num_jobs -= 1
复制代码

 注意小技巧: 使用None来表示task处理完毕。

 

运行结果:

 

2) pipe

 

pipe()返回一对连接对象,代表了pipe的两端。每个对象都有send()和recv()方法。

 

 

代码:

 

复制代码
from multiprocessing import Process, Pipe

def f(conn):
    conn.send([42, None, 'hello'])
    conn.close()

if __name__ == '__main__':
    parent_conn, child_conn = Pipe()
    p = Process(target=f, args=(child_conn,))
    p.start()
    p.join()
    print(parent_conn.recv())   # prints "[42, None, 'hello']"
复制代码

 

 

3)Value + Array

Value + Array 是python中共享内存 映射文件的方法,速度比较快。

 

复制代码
from multiprocessing import Process, Value, Array

def f(n, a):
    n.value = n.value + 1
    for i in range(len(a)):
        a[i] = a[i] * 10

if __name__ == '__main__':
    num = Value('i', 1)
    arr = Array('i', range(10))

    p = Process(target=f, args=(num, arr))
    p.start()
    p.join()

    print(num.value)
    print(arr[:])
    
    p2 = Process(target=f, args=(num, arr))
    p2.start()
    p2.join()

    print(num.value)
    print(arr[:])

# the output is :
# 2
# [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
# 3
# [0, 100, 200, 300, 400, 500, 600, 700, 800, 900]
复制代码

 

 

参考: 
The Python Standard Library By Example

http://www.doughellmann.com/PyMOTW/multiprocessing/communication.html 

 

完! 

转载于:https://www.cnblogs.com/L-H-R-X-hehe/p/3815349.html

http://www.lbrq.cn/news/844057.html

相关文章:

  • 网站功能简介/快速seo关键词优化技巧
  • 互联网公司怎么找网站建设客户/站长之家网站流量查询
  • 如何制作课程网站模板下载/百度网页游戏大厅
  • 佛山网站建设网站建设/营销软文范例大全100
  • 建设政府信息资源共享网站/百度收录网站要多久
  • 台州关键词优化哪家好/河南企业站seo
  • 海外社交媒体营销/郑州seo技术服务顾问
  • 东莞网站建设方案托管/十大软件免费下载网站排行榜
  • 官网苹果14/seo零基础视频教程
  • 免费b2b网站大全免费网站免登录网页/三亚百度推广公司
  • 新手做电影网站/百度学术搜索
  • 网站建设与运营策划书/seo推广优化公司哪家好
  • wordpress网站数据库存在哪里/网络广告营销对应案例
  • 广州电商网站开发公司/免费制作网站平台
  • 网站建设logo要什么格式/企业网站seo案例
  • 如何设计制作一般企业网站/广告推广策划
  • 东莞品牌营销型网站建设/指数函数和对数函数
  • 网站开发项目运营经理岗位职责/中国站长之家
  • 公司网站建设华为/2022年度关键词
  • 怎么制作网页调查问卷/seo黑帽是什么
  • 做网站一般图片的比例/网站排名查询工具
  • 网站建设在哪里备案/网络营销推广策划步骤
  • 制作视频的免费软件/seo查询工具网站
  • 阿里做网站/品牌策划方案案例
  • 石家庄网站建设电话/市场推广方案范文
  • 深圳住房和建设局网站认租申请/软文网站发布平台
  • 怎么给自己做网站吗/seo会被取代吗
  • 全屏响应式网站模板/个人开发app可以上架吗
  • 外贸大型门户网站建设/自己开网店怎么运营
  • 东莞市永铭装饰有限公司/搜索引擎优化服务公司哪家好
  • 【C#地图显示教程:实现鼠标绘制图形操作】
  • 《大数据技术原理与应用》实验报告四 MapReduce初级编程实践
  • C语言-数据输入与输出
  • C++卸载了会影响电脑正常使用吗?解析C++运行库的作用与卸载后果
  • 在 Azure Linux 上安装 RustFS
  • 《星盘接口4:银河守护者》