python 线程池复制参数
python thread pool copy parameters
我正在学习多线程,我尝试实现一些东西来理解它。
在阅读了几个(非常技术性的主题)后,我找不到解决方案或方法来理解我的问题。
基本上,我有以下结构:
class MyObject():
def __init__():
self.lastupdate = datetime.datetime.now()
def DoThings():
...
def MyThreadFunction(OneOfMyObject):
OneOfMyObject.DoThings()
OneOfMyObject.lastupdate = datetime.datetime.now()
def main():
MyObject1 = MyObject()
MyObject2 = MyObject()
MyObjects = [MyObject1, MyObject2]
pool = Pool(2)
while True:
pool.map(MyThreadFunction, MyObjects)
if __name__ == '__main__':
main()
我认为 .map 函数复制了我的对象,因为它不更新时间。这样对吗 ?如果是,我如何输入我的对象的全局版本。如果不是,您知道为什么我的对象中的时间是固定的吗?
当我用print(MyObject.lastupdate)检查新时间时,时间是正确的,但不是在下一个循环中
非常感谢您的任何想法
是的,python 线程将序列化(实际上,pickle)您的对象,然后在线程中重建它们。但是,它也会将它们送回。要恢复它们,请参阅以下代码的注释补充:
class MyObject():
def __init__():
self.lastupdate = datetime.datetime.now()
def DoThings():
...
def MyThreadFunction(OneOfMyObject):
OneOfMyObject.DoThings()
OneOfMyObject.lastupdate = datetime.datetime.now()
# NOW, RETURN THE OBJECT
return oneOfMyObject
def main():
MyObject1 = MyObject()
MyObject2 = MyObject()
MyObjects = [MyObject1, MyObject2]
with Pool(2) as pool: # <- this is just a neater way of doing it than a while loop for various reasons. Checkout context managers if interested.
# Now we recover a list of the updated objects:
processed_object_list = pool.map(MyThreadFunction, MyObjects)
# Now inspect
for my_object in processed_object_list:
print(my_object.lastupdate)
if __name__ == '__main__':
main()
我正在学习多线程,我尝试实现一些东西来理解它。 在阅读了几个(非常技术性的主题)后,我找不到解决方案或方法来理解我的问题。
基本上,我有以下结构:
class MyObject():
def __init__():
self.lastupdate = datetime.datetime.now()
def DoThings():
...
def MyThreadFunction(OneOfMyObject):
OneOfMyObject.DoThings()
OneOfMyObject.lastupdate = datetime.datetime.now()
def main():
MyObject1 = MyObject()
MyObject2 = MyObject()
MyObjects = [MyObject1, MyObject2]
pool = Pool(2)
while True:
pool.map(MyThreadFunction, MyObjects)
if __name__ == '__main__':
main()
我认为 .map 函数复制了我的对象,因为它不更新时间。这样对吗 ?如果是,我如何输入我的对象的全局版本。如果不是,您知道为什么我的对象中的时间是固定的吗?
当我用print(MyObject.lastupdate)检查新时间时,时间是正确的,但不是在下一个循环中
非常感谢您的任何想法
是的,python 线程将序列化(实际上,pickle)您的对象,然后在线程中重建它们。但是,它也会将它们送回。要恢复它们,请参阅以下代码的注释补充:
class MyObject():
def __init__():
self.lastupdate = datetime.datetime.now()
def DoThings():
...
def MyThreadFunction(OneOfMyObject):
OneOfMyObject.DoThings()
OneOfMyObject.lastupdate = datetime.datetime.now()
# NOW, RETURN THE OBJECT
return oneOfMyObject
def main():
MyObject1 = MyObject()
MyObject2 = MyObject()
MyObjects = [MyObject1, MyObject2]
with Pool(2) as pool: # <- this is just a neater way of doing it than a while loop for various reasons. Checkout context managers if interested.
# Now we recover a list of the updated objects:
processed_object_list = pool.map(MyThreadFunction, MyObjects)
# Now inspect
for my_object in processed_object_list:
print(my_object.lastupdate)
if __name__ == '__main__':
main()