【问题标题】:Alter variables within a multiprocessing queue更改多处理队列中的变量
【发布时间】:2012-07-11 12:50:39
【问题描述】:

有没有办法在将值放入队列后更改它们?例如,如果我有一个队列中有几个变量,我可以将第一个变量与队列中没有的其他值相加吗?最好的方法是:

x = queue.get()
queue.put(x+some_value)

或者有没有办法在不先从队列中移除对象的情况下做到这一点?

【问题讨论】:

  • 您必须使用队列有什么特别的原因吗?为什么不使用列表,那么您可以很容易地修改适当的值。

标签: python python-2.7


【解决方案1】:

您可能需要共享值,例如 multiprocessing.Value、multiprocessing.Array,而不是队列。队列不允许。

【讨论】:

    【解决方案2】:

    队列不允许以这种方式访问​​;您要求直接访问仍在队列中的对象,这违背了队列的目的。

    我认为您可能正在寻找的是要使用的双端队列对象而不是队列(在此处阅读:http://docs.python.org/library/collections.html#collections.deque

    双端队列对象是线程安全的,可以像队列一样运行,同时仍允许使用索引值直接访问其成员。但是,除非您访问双端队列的左端或右端,否则随机访问速度较慢,因此,如果我正确理解了您的问题,这对您来说应该不是问题。

    但是,如果您确实对双端队列有很多随机访问,则只需使用 multiprocessing.array。

    【讨论】:

    • 我不确定我理解你的意思。如果它在不同的进程中运行,地址空间将不会被共享,因此无需担心。另外,关于您的原始问题,我意识到 Queue() 有一个内部 Queue().queue 它本质上是一个双端队列对象,您可以使用它以您在原始问题中描述的方式访问队列。但是不建议这样做;在这里阅读更多信息:stackoverflow.com/questions/717148/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2015-10-11
    相关资源
    最近更新 更多