python 简单示例中的并行多处理

Parallel multiprocessing in python easy example

我需要说多处理对我来说是新事物。我读了一些关于它的内容,但这让我更加困惑。我想通过一个简单的例子来理解它。假设我们在第一个函数中有 2 个函数,我只是递增 'a' 变量,然后将其分配给 'number' 变量,在第二个函数中,我启动第一个函数,每隔一秒我都想打印 'number' 多变的。它应该看起来像:

global number

def what_number():
    a=1
    while True:
       a+=1
       number=a

def read_number():
    while True:
       --> #here I need to start 'what_number' function <--
        time.sleep(1)
        print(number)


if __name__ == "__main__":
    read_number()

我该怎么做?有没有简单正确的方法来做到这一点?

更新:

我看到了 noxdafox 的回答,我真的很感激,但这并不是我想要的。首先,我不想在第一个函数中发送值(noxdafox 代码中的'main')。其次,我不想获取所有值,所以 quene 将无法工作。我需要在每一秒的 while 循环之后得到。代码应该是这样的:

import multiprocessing
import time

number = 0


def child_process():
    global number
    while True:
        number += 1
        print(number)


def main():
    process = multiprocessing.Process(target=child_process)
    process.start()

    while True:
       print("should get same number:",number)
       time.sleep(0.001)

if __name__ == "__main__":
    main()

如果你 运行 上面的代码你会得到类似的东西:

但是这个蓝色选择的值应该是相同的!这就是主要问题:)

P.S抱歉造成混乱

由于进程位于单独的内存地址空间中,因此您不能共享变量。此外,您错误地使用了全局变量。 Here您可以查看有关如何使用全局变量的示例。

在进程之间共享信息的最直接方式是通过 Pipe or Queue

import multiprocessing

def child_process(queue):
    while True:
        number = queue.get()
        number += 1
        queue.put(number)

def main():
    number = 0
    queue = multiprocessing.Queue()
    process = multiprocessing.Process(target=child_process, args=[queue])
    process.start()

    while True:
        print("Sending %d" % number)
        queue.put(number)

        number = queue.get()
        print("Received %d" % number)

        time.sleep(1)

if __name__ == "__main__":
    main()

好的,这需要一些时间,但我想通了。一切都是关于 Sharing state between processes 现在一切都像魅力一样。代码:

from multiprocessing import Process, Value
import time


def child_process(number):
    number.value = 0
    while True:
        number.value += 1
        #print(number)


def main():
    num = Value('i')
    process = Process(target=child_process, args=(num,))
    process.start()
    while True:
       print("should get same number:", num.value)
       time.sleep(1)

if __name__ == "__main__":
    main()