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()