zoukankan      html  css  js  c++  java
  • python MultiProcessing标准库使用Queue通信的注意要点

    今天原本想研究下MultiProcessing标准库下的进程间通信,根据 MultiProcessing官网 给的提示,有两种方法能够来实现进程间的通信,分别是pipe和queue。因为看queue顺眼,就想着拿queue实现,后来,被坑了....于是有了这篇文章。
    我按照 python标准库之MultiProcessing库的研究 (1) 里面的代码来的,结果就是不断的出错,死过就是不出结果,看看程序:

    from multiprocessing import Pool, queues
    import os
    
    
    def func(msg, q):
        q.put([msg, None, 'hello'])
        print(os.getpid())
    
    
    if __name__ == '__main__':
        q = queues.Queue()
        pool = Pool(4)
        for i in range(4):
            pool.apply_async(func, (i, q, ))
        print("Mark~ Mark~ Mark~~~~~~~~~~~~~~~~~~~~~~")
        print(q.qsize())
        pool.close()
        pool.join()   # 调用join之前,先调用close函数,否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束
        for i in range(q.qsize()):
            print(q.get())

    其实没什么,就是在apply_async函数中加了个Queue对象而已。
    可是死活就是不行。后来查了这篇文章 python多进程编程:使用Queue,Pool启动子进程失败问题

    后来在官网仔细找了下,发现:

    so,就是我需要再加上一个manager,赶明再试试...

  • 相关阅读:
    九度oj题目1019:简单计算器
    九度oj题目1555:重复子串
    Java泛型
    Remove Duplicates from Sorted Array
    Add Binary
    Plus One
    Remove Element
    Remove Nth Node From End of List
    Longest Common Prefix
    Roman to Integer
  • 原文地址:https://www.cnblogs.com/zhiyong-ITNote/p/7197854.html
Copyright © 2011-2022 走看看