python浮点对象没有属性';价值';

python浮点对象没有属性';价值';,python,shared-memory,python-multiprocessing,Python,Shared Memory,Python Multiprocessing,我有4个共享变量。我正在根据正在运行的进程更新一对 class App(multiprocessing.Process): def __init__ (self,process_id): multiprocessing.Process.__init__(self) self.process_id = process_id def run(self,X,Y,lock): while True: with

我有4个共享变量。我正在根据正在运行的进程更新一对

class App(multiprocessing.Process):
    def __init__ (self,process_id):
        multiprocessing.Process.__init__(self)
        self.process_id = process_id
   def run(self,X,Y,lock):
        while True: 
               with lock :
               #some calculations which returns x and y 
               print 'x and y returned are :',x,y
                 try:
                    X.value = x
                    Y.value = y
                 except Exception ,e:
                   print e
                 
 

if __name__ == '__main__':
    xL = Value('d',0.0)
    xR = Value('d',0.0)
    yL = Value('d',0.0)
    yR = Value('d',0.0)

    lock = Lock()

    a = A('1')
    b = B('2')
   
    process_a = Process(target = a.run, args(xL,yL,lock, ))  
    process_b = Process(target = b.run, args(xR,yR,lock, ))
   
    process_a.start()
    process_b.start()
这是输出:

返回的x和y为:375 402


“float”对象没有属性“value”


需要帮忙吗

看看我用括号中的数字注释的代码的三个部分:

   def run(self,X,Y,lock):
        while True:
               #some calculations which returns x and y 
               with lock :
                 X.value = x
                 Y.value = y

                 # (3) you now try to access an attribute of the arguments
                 # called 'value'
                 print X.value , Y.value , self.process_id


if __name__ == '__main__':
    xL = Value('d',0.0) # (1) these variables are assigned some objects that
    xR = Value('d',0.0) # are returned by the function 'Value'
    yL = Value('d',0.0) 
    yR = Value('d',0.0) 

    lock = Lock()

    a = A('1')
    b = B('2')

    # (2) now your variables are being passed to the 'a.run' and 'b.run'
    # methods
    process_a = Process(target = a.run, args(xL,yL,lock, ))  
    process_b = Process(target = b.run, args(xR,yR,lock, ))

    process_a.start()
    process_b.start()
当您跟踪代码的执行时,您可以看到它正试图访问函数
value
返回的任何对象中名为
value
的属性。错误消息告诉您,
Value
正在返回
float
对象,这些对象没有
Value
属性

以下情况之一(最有可能)对您不利:

  • 函数
    Value
    没有做您认为它是做的事情,它在不应该做的时候返回浮动
  • 在“返回x和y的某些计算”代码中,您正在用浮点覆盖x和y参数

  • 看看我用括号中的数字注释的代码的三个部分:

       def run(self,X,Y,lock):
            while True:
                   #some calculations which returns x and y 
                   with lock :
                     X.value = x
                     Y.value = y
    
                     # (3) you now try to access an attribute of the arguments
                     # called 'value'
                     print X.value , Y.value , self.process_id
    
    
    if __name__ == '__main__':
        xL = Value('d',0.0) # (1) these variables are assigned some objects that
        xR = Value('d',0.0) # are returned by the function 'Value'
        yL = Value('d',0.0) 
        yR = Value('d',0.0) 
    
        lock = Lock()
    
        a = A('1')
        b = B('2')
    
        # (2) now your variables are being passed to the 'a.run' and 'b.run'
        # methods
        process_a = Process(target = a.run, args(xL,yL,lock, ))  
        process_b = Process(target = b.run, args(xR,yR,lock, ))
    
        process_a.start()
        process_b.start()
    
    当您跟踪代码的执行时,您可以看到它正试图访问函数
    value
    返回的任何对象中名为
    value
    的属性。错误消息告诉您,
    Value
    正在返回
    float
    对象,这些对象没有
    Value
    属性

    以下情况之一(最有可能)对您不利:

  • 函数
    Value
    没有做您认为它是做的事情,它在不应该做的时候返回浮动
  • 在“返回x和y的某些计算”代码中,您正在用浮点覆盖x和y参数

  • 请显示完整的错误消息。“float”对象没有属性“value”,这是它在我的terminal@BryanOakley,不应该为xL对象指定一个值?我我刚刚在这里稍微修改了文档中的代码:这只是错误的最后一行。请包含完整的错误消息。尽管您将
    X
    Y
    作为
    多处理.Value
    (它确实具有
    Value
    属性)传递,您在计算中的某个位置用浮点数覆盖名称。请显示完整的错误消息。“float”对象没有属性“value”。这是它在我的terminal@BryanOakley,不应该为xL对象指定一个值?我我刚刚在这里稍微修改了文档中的代码:这只是错误的最后一行。请包含完整的错误消息。虽然您将
    X
    Y
    作为
    多处理.Value
    (它确实具有
    Value
    属性)传递,但您似乎在计算中的某个地方用浮点覆盖了名称。我认为您没有找到根本问题。注释
    #返回x和y的一些计算
    表示大量代码。我认为OP更可能在被剪断的代码中的某个地方为
    X
    Y
    分配一个浮点。(我检查了
    multiprocessing.Value
    确实有一个
    Value
    属性。他调用
    Value
    的方式与
    multiprocessing.Value
    的文档化方式一致。)鉴于OP已经接受了这个答案,我可能是错的。@StevenRumbalski你完全正确。我已经编辑了我的答案,将其包括在内。我认为你遗漏了根本问题。注释
    #返回x和y的一些计算
    表示大量代码。我认为OP更可能在被剪断的代码中的某个地方为
    X
    Y
    分配一个浮点。(我检查了
    multiprocessing.Value
    确实有一个
    Value
    属性。他调用
    Value
    的方式与
    multiprocessing.Value
    的文档化方式一致。)鉴于OP已经接受了这个答案,我可能是错的。@StevenRumbalski你完全正确。我已经编辑了我的答案,将其包括在内。