python浮点对象没有属性';价值';
我有4个共享变量。我正在根据正在运行的进程更新一对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
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
没有做您认为它是做的事情,它在不应该做的时候返回浮动看看我用括号中的数字注释的代码的三个部分:
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
没有做您认为它是做的事情,它在不应该做的时候返回浮动请显示完整的错误消息。“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你完全正确。我已经编辑了我的答案,将其包括在内。