【问题标题】:Why can't I see the queue written to in a subprocess in my main thread in Python?为什么我看不到 Python 主线程的子进程中写入的队列?
【发布时间】:2018-03-07 02:54:32
【问题描述】:

我有一个使用多重处理的简单程序。它基本上执行数学运算并将结果写入队列。我可以看到队列大小在多处理函数内部增长,但是一旦我在主线程/进程之外,队列就是空的。这似乎是我不理解的某种范围界定问题。有人可以解释为什么队列在函数之外是空的吗?我已经尝试过将队列作为参数传递给函数以及其他方法,但它似乎总是为空。

from multiprocessing import Pool, Process
import math
import Queue

q = Queue.Queue(maxsize=0)


def compute_and_write(val):
    sq = val * val
    sq = math.sqrt(sq)
    sq = sq + sq + sq
    q.put("Q" + str(sq))
    print "Queue size (inside) = " + str(q.qsize())
    return sq


p = Pool(8)
y = []

for x in range(1, 100):
    y.append(x)

res = p.map(compute_and_write, y)
print "Queue size (outside) = " + str(q.qsize())

【问题讨论】:

    标签: python python-2.7 python-multiprocessing


    【解决方案1】:

    Queue.Queue 在跨进程行为方面与列表或字典没有什么不同:每个进程都有自己不同的对象,一个进程副本的更改对任何其他进程的副本都没有影响.

    你想要一个multiprocessing.Queue。这旨在具有在进程中可见的状态。这就是它的全部内容。

    【讨论】:

    • 非常感谢。我是多处理的新手。做到了。
    猜你喜欢
    • 2019-06-04
    • 1970-01-01
    • 2015-02-07
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 2018-11-07
    • 1970-01-01
    相关资源
    最近更新 更多