Python多处理队列不共享队列项

Python多处理队列不共享队列项,python,queue,Python,Queue,我正在创建两个过程。一个将向Mutliprocessing.Queue添加int值的函数,从1到5。另一个也将添加到队列中一次,然后它将循环10秒,并尝试从队列中读取值 为什么第二个进程不能在第一个线程中将项目添加到队列中?我的假设是,当创建一个Multiprocessing.Queue时,我可以从一个进程添加到它,并且它可以被另一个进程读取。看起来似乎它只是添加到被传递的QUEU,而不是父队列。我不能从父进程创建的2个不同进程向某些类型的队列添加项目吗 from multiprocessing

我正在创建两个过程。一个将向Mutliprocessing.Queue添加int值的函数,从1到5。另一个也将添加到队列中一次,然后它将循环10秒,并尝试从队列中读取值

为什么第二个进程不能在第一个线程中将项目添加到队列中?我的假设是,当创建一个Multiprocessing.Queue时,我可以从一个进程添加到它,并且它可以被另一个进程读取。看起来似乎它只是添加到被传递的QUEU,而不是父队列。我不能从父进程创建的2个不同进程向某些类型的队列添加项目吗

from multiprocessing import Process, Queue
import time


def f(q):

    for a in range(5):
        print "Adding to Q!"
        time.sleep(1)
        q.put(a)

def g(q):

    i = 0
    v = True
    q.put("Adding to this q")
    while v == True:
        time.sleep(1)
        i = i + 1
        print "Get slept time " , i
        try:
                print "From the q " + str(q.get(True,1))
        except:
                print "Empty"
        if i == 10:
                v = False

if __name__ == '__main__':
    q = Queue(10)
    print "First process"
    p = Process(target=f, args=(q,))
    p.start()

    print "Second Process"
    p1 = Process(target=g, args=(q,))
    p1.start()

    p.join()
    p1.join()
添加或删除join()似乎对所需的输出没有影响 我现在的输出。**这不是期望的输出**

First process
Second Process
Adding to Q!
Get slept time  1
From the q Adding to this q
Adding to Q!
Get slept time  2
Adding to Q!
Empty
Get slept time  3
Adding to Q!
Empty
Get slept time  4
Adding to Q!
Empty
Get slept time  5
Empty
Get slept time  6
Empty
Get slept time  7
Empty
Get slept time  8
Empty
Get slept time  9
Empty
Get slept time  10
Empty

嗯,问题不在于队列,
它在您的
print“From q”+q.get(True,1)

例外情况是
TypeError:无法连接'str'和'int'对象

您最好使用
print“From q{}”。格式(q.get(True,1))

@跳跳 在您输入后编辑:
从队列中读/写没有问题
以下是一些代码示例:

from multiprocessing import Process, Queue
import time

def f(q):

    for a in range(5):      
        time.sleep(1)
        q.put(a)

def g(q):

    i = 0
    v = True
    q.put("Adding to this q")
    while v == True:
        time.sleep(1)
        i = i + 1
        print "Get slept time " , i
        try:
            print "From the q {}".format(q.get(True,1)) 
        except Exception as e:
            print 'exception raised {} {}'.format(e, type(e))
            print "Empty"
        if i == 10:
            v = False

if __name__ == '__main__':
    q = Queue(10)
    p = Process(target=f, args=(q,))
    p.start()

    p1 = Process(target=g, args=(q,))
    p1.start()

    p.join()
    p1.join()
    print q.qsize(), q.empty()
结果是:

Get slept time  1
From the q Adding to this q
Get slept time  2
From the q 0
Get slept time  3
From the q 1
Get slept time  4
From the q 2
Get slept time  5
From the q 3
Get slept time  6
From the q 4
Get slept time  7
exception raised  <class 'Queue.Empty'>
Empty
Get slept time  8
exception raised  <class 'Queue.Empty'>
Empty
Get slept time  9
exception raised  <class 'Queue.Empty'>
Empty
Get slept time  10
exception raised  <class 'Queue.Empty'>
Empty
0 True
睡觉时间1
从q加上这个q
睡觉时间2
从Q0开始
睡觉时间3
来自Q1
睡觉时间4
来自q 2
睡觉时间5
来自Q3
睡觉时间6
来自Q4
睡觉时间7
提出的例外情况
空的
睡觉时间8
提出的例外情况
空的
睡觉时间9点
提出的例外情况
空的
睡觉时间10点
提出的例外情况
空的
0对

有问题吗?

是的,我已经将其转换为字符串,但我一定没有复制该代码并错过转换的位置。但是,即使解决了这个问题,也不能解决为什么我不能在第一个线程之前读取队列中的值thread@tiggles您注意到我所做的更改了吗?是的,现在我看到了,它可以很好地使用.format(q.get(True,1))。我理解为什么我没有看到您得到的错误,因为我没有打印异常输出。我只是在打印“空”。感谢您的帮助,在centos 6.5上使用python 2.6 x64对其进行了测试,我得到了所需的输出。您得到了我得到的输出吗?或者你得到了不同的输出?你能把它寄出去吗?