在Python中,如何在两个进程之间共享一个变量?

2024-03-28 12:49:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个进程,一个向队列添加作业,另一个从同一个队列中取出作业并运行它们。这应该如预期的那样工作,我不知道为什么worker永远找不到工作。我的代码是:

from multiprocessing import Process
from Queue import Queue
import time

q = Queue()

def queuer():
    while True:
        q.put("JOB")
        print "Adding JOB"
        time.sleep(1)

def worker():  
    while True:
        if not q.empty():
            item = q.get()
            print "Running", item
        else:
            print "No jobs"
            time.sleep(1)

a = Process(target=queuer)
a.start()

b = Process(target=worker)
b.start()

Tags: fromimporttruetime队列queuedef作业
2条回答

两件事:

  1. 您需要将队列作为参数传递给两个进程。在
  2. 你应该用多处理队列,不是排队。排队(用于螺纹)

这个代码适用于我:

from multiprocessing import Process, Queue
import time

def queuer(q):
    while True:
        q.put("JOB")
        print "Adding JOB"
        time.sleep(1)

def worker(q):  
    while True:
        if not q.empty():
            item = q.get()
            print "Running", item
        else:
            print "No jobs"
            time.sleep(1)



if __name__ == '__main__':
    q = Queue()
    a = Process(target=queuer, args=(q,))
    b = Process(target=worker, args=(q,))
    a.start()
    b.start()

一种可能是使用多处理命名空间中的Queue对象。描述如下: http://docs.python.org/2/library/multiprocessing.html#sharing-state-between-processes

所以我修改了你的代码。我只做了两个改动: -使用多处理队列 -避免使用全局变量,并将队列作为参数传递给worker和queuer(这不是必需的,但保持所有内容整洁是一个很好的实践)

# use the Queue from the multiprocessing namespace!
from multiprocessing import Process, Queue
import time

q = Queue()

def queuer(q):
    while True:
        q.put("JOB")
        print "Adding JOB"
        time.sleep(1)

def worker(q):  
    while True:
        if not q.empty():
            item = q.get()
            print "Running", item
        else:
            print "No jobs"
            time.sleep(1)

a = Process(target=queuer, args =(q,))
a.start()

b = Process(target=worker, args = (q,))
b.start()

相关问题 更多 >