如何在python中的进程之间共享数据?

如何在python中的进程之间共享数据?,python,multiprocessing,Python,Multiprocessing,下面是一个简单的例子: from collections import deque from multiprocessing import Process global_dequeue = deque([]) def push(): global_dequeue.append('message') p = Process(target=push) p.start() def pull(): print(global_dequeue) pull() 输出为deque([

下面是一个简单的例子:

from collections import deque
from multiprocessing import Process

global_dequeue = deque([])

def push():
    global_dequeue.append('message')

p = Process(target=push)
p.start()

def pull():
    print(global_dequeue)

pull()
输出为deque([])

如果我直接调用push函数,而不是作为一个单独的进程,那么输出将是deque(['message'])


如何将消息导入deque,但仍在单独的进程中运行push函数

您可以使用多处理队列对象共享数据,该对象用于在进程之间共享数据:

from multiprocessing import Process, Queue
import time


def push(q):  # send Queue to function as argument
    for i in range(10):
        q.put(str(i))  # put element in Queue
        time.sleep(0.2)
    q.put("STOP")  # put poison pillow to stop taking elements from Queue in master


if __name__ == "__main__":
    q = Queue()  # create Queue instance
    p = Process(target=push, args=(q,),)  # create Process
    p.start()  # start it

    while True:
        x = q.get()
        if x == "STOP":
            break
        print(x)
    p.join()  # join process to our master process and continue master run
    print("Finish")

如果有帮助,请告诉我,请随时提问。

您也可以使用经理来实现这一点

Python 2:

Python 3:

用法示例:


Artiom Kozyrev就是这样,谢谢。一个问题。如果我将不按顺序完成的作业放入队列列表,我应该怎么做?呼叫get,如果作业id不是我要找的,请将其放回队列?@ape_face是的,如果您现在不想处理任务,可以将其返回队列,但您应该使用一些同步,而不是jutst posison枕头。