跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教有关 Python 多进程 multiprocessing 中使用 Queue 产生的死锁问题
未分類
12 3 月 2021

请教有关 Python 多进程 multiprocessing 中使用 Queue 产生的死锁问题

请教有关 Python 多进程 multiprocessing 中使用 Queue 产生的死锁问题

資深大佬 : mrning 2

想实现多进程执行某项任务( moviepy 多进程),获得返回的值( frame,numpy 数组)。 尝试过用 ApplyResult.get() 获取,不过返回的内容不能被 pickle,所以用了 queue 。 或者还有其他更好的方法么

下面是个简单的 demo,似乎遇到了死锁,网上没有找到好的方案,求教

import multiprocessing as mp from multiprocessing import Pool,Queue import os,time,random   def worker(msg,q):     t_start = time.time()     print("%s  Started with pid: %d"%(msg,os.getpid()))     a = 2**100000000     t_stop = time.time()     print(msg,"  Finishing with time: %0.2f"%(t_stop-t_start))         q.put(a)        if __name__ == '__main__':     mp.set_start_method("spawn")     pool = mp.Pool(3)      q=mp.Queue()     for i in range(10):         print(i)         pool.apply_async(worker,(i,q,))     pool.close()     for thread_i in range(10):             result = q.get()             print(result)      pool.join()     print("Waiting") 

大佬有話說 (8)

  • 資深大佬 : xiaolinjia

    q = mp.Manager().Queue()。个人经验是当你用 apply.async 卡住没抛出异常的时候,把他改成 apply 阻塞型,看是报啥错。

  • 資深大佬 : nikan999

    打印错误
    Queue objects should only be shared between processes through inheritance
    参考:
    https://stackoverflow.com/questions/9908781/sharing-a-result-queue-among-several-processes

  • 資深大佬 : Jblue

    可以把返回值存起来放到 redis 之类的

  • 主 資深大佬 : mrning

    @xiaolinjia
    @nikan999
    改了下,在 linux 下执行,能看到 print 的信息了。worker 函数执行完了,然后在 result = q.get()这里卡住了

    @Jblue
    实在不行的话…也是个办法

  • 主 資深大佬 : mrning

    ![py11.PNG]( https://i.loli.net/2021/03/26/qp5MS1olWGixHmA.png)

    代码及执行结果

  • 資深大佬 : nikan999

    print 2**100000000
    这个数太大了导致卡在打印这一块

  • 主 資深大佬 : mrning

    @nikan999 原来如此

  • 資深大佬 : hareandlion

    queue 用 mp.Manager().Queue(),输出超级大数让我机器内存无法释放……

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具