RC47YUI6 2023-12-27 16:15 采纳率: 33.3%
浏览 4
已结题

python3在类中使用多进程修改类属性,最后类属性被重置为初始值

在学习python3,在类中使用多进程multiprocess库代码如下

from multiprocessing import Process

class x1:
    def __init__(self):
        self.l1 = [
            '1', '2', '3'
        ]
        self.p1 = Process(target=self.pop1, args=())
        self.p1.start()

    def pop1(self):
        self.l1.pop(0)


if __name__ == '__main__':
    xx = x1()
    print(xx.l1)

意图是每次通过多进程模块运行pop1这个函数时,从x1类的l1这个属性列表里面弹出第一个值
按照我自己理解,最终print(xx.l1)这行代码打印出来的应该是一个列表['2', '3'],但实际打印出的东西是['1', '2', '3']
请问这是为什么?怎么解决?
测试1:如果不使用多进程,只是普通地调用pop1这个函数,最终打印出来的东西符合我的预期
测试2:如果在pop1函数内,每次pop完成后都打印列表,最终打印出的列表符合预期,但一旦再次用print(xx.l1)打印,打印出来的是最初的列表

  • 写回答

3条回答 默认 最新

  • 无序繁星 2023-12-27 16:59
    关注

    多进程中的内存是独立的,也就是你pop的对象跟主进程的对象不是一个对象,使用多线程能得到你想要的结果

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月5日
  • 已采纳回答 12月28日
  • 修改了问题 12月27日
  • 创建了问题 12月27日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。