Xcv1013672424 2023-09-06 15:51 采纳率: 66.7%
浏览 4
已结题

python 多进程,while循环问题(相关搜索:while循环)

python 多进程,while循环问题

下面的程序也没有报错,但是运行无结果,怎么个事?


```python
from multiprocessing import Process,Value


def f1(a):
    while True:
        a.value =  a.value + 1
        
        # print(b)
    
def f2(a):
    while True:
        print(a.value)


if __name__ == '__main__':
    b = Value('i' ,2)
    # 通过对Process类进行实例化创建一个子进程
    p1 = Process(target=f1,args=(b,))
    p2 = Process(target=f2,args=(b,))

    p1.start()

    p2.start()

```

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-06 18:58
    关注

    【以下回答由 GPT 生成】

    在Python中使用多进程时,每个进程都有自己独立的内存空间。因此,子进程中对变量的修改不会影响主进程的变量。在你的代码中,你只是在子进程中修改了a的值,但是主进程并没有从子进程中获取到这个修改后的值,因此没有输出任何结果。

    为了解决这个问题,你可以使用multiprocessing.Queue来在不同的进程之间进行通信。Queue是一个线程安全的数据结构,可以用于在多个进程中传递数据。

    下面是修改后的代码:

    from multiprocessing import Process, Queue
    
    def f1(q):
        while True:
            value = q.get()  # 从队列中获取数据
            value = value + 1
            q.put(value)  # 将修改后的值放回队列
    
    def f2(q):
        while True:
            value = q.get()  # 从队列中获取数据
            print(value)
    
    if __name__ == '__main__':
        q = Queue()
        q.put(2)  # 初始化队列的值
    
        p1 = Process(target=f1, args=(q,))
        p2 = Process(target=f2, args=(q,))
    
        p1.start()
        p2.start()
    

    在这个修改后的代码中,我们使用了multiprocessing.Queue来传递数据。首先使用q.put(2)将初始值2放入队列中,然后在f1f2中使用q.get()获取队列中的值,并进行相应的操作。修改后的值使用q.put()再次放回队列中,使得其他进程可以获取到修改后的值。

    这样改动后,你应该能够看到f2进程不断输出递增的值了。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月15日
  • 已采纳回答 3月7日
  • 创建了问题 9月6日