【问题标题】:How to share data between Python processes?如何在 Python 进程之间共享数据?
【发布时间】:2016-02-02 15:25:10
【问题描述】:

我正在使用多处理为我的 Python 应用程序创建一个子进程。 我想在我的父进程和子进程之间共享数据。 值得一提的是,我需要异步共享这个,也就是说子进程和父进程会在代码运行期间更新数据。

最好的方法是什么?

【问题讨论】:

  • p = multiprocessing.Process(target=myProcess, args=()) p.start()
  • 这取决于您要共享的数据类型以及您正在运行的代码。你能提供一个你想要/做了什么的最小例子吗?

标签: python python-2.7 multiprocessing python-multiprocessing


【解决方案1】:

这是 python 文档中的一个简单示例 -

from multiprocessing import Process, Queue

def f(q):
    q.put([42, None, 'hello'])

if __name__ == '__main__':
    q = Queue()
    p = Process(target=f, args=(q,))
    p.start()
    print q.get()    # prints "[42, None, 'hello']"
    p.join()

你也可以使用管道, 详情请参阅 - https://docs.python.org/2/library/multiprocessing.html

【讨论】:

  • 谢谢!如何检查 Queue 或 PIPE 变量中是否发生了变化,然后执行一些操作?
  • 队列和管道不是变量,而是进程之间的链接。您可以通过它发送和接收变量
  • @Dan 你可以参考我分享的链接的“共享内存”部分
  • @alokthkur,如果我想将内存中的大量数据传递给另一个进程进行分析(即文件内容),如何在不复制数据的情况下传递它?知道如何共享数据,并且仅将指针作为 argv 传递吗?
【解决方案2】:

这是一个多进程-多线程并共享几个变量的示例:

from multiprocessing import Process, Queue, Value, Manager
from ctypes import c_bool
from threading import Thread


ps = []

def yourFunc(pause, budget):
    while True:
        print(budget.value, pause.value)
        ##set value
        pause.value = True  
        ....

def multiProcess(threads, pause, budget):
    for _ in range(threads):
        t = Thread(target=yourFunc(), args=(pause, budget,)) 
        t.start()
        ts.append(t)
        time.sleep(3)

if __name__ == '__main__':
    pause = Value(c_bool, False)
    budget = Value('i', 5000)

    for i in range(2):
        p = Process(target=multiProcess, args=(2, pause, budget))
        p.start()
        ps.append(p) 

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 2022-01-03
    • 1970-01-01
    • 2014-10-22
    • 2020-02-18
    • 1970-01-01
    • 2013-03-23
    • 2012-03-19
    • 1970-01-01
    相关资源
    最近更新 更多