Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 多处理、动态嵌套管理器在windows中不工作(在Mac上正常)_Python 3.x_Windows_Dynamic_Nested_Multiprocessing - Fatal编程技术网

Python 3.x 多处理、动态嵌套管理器在windows中不工作(在Mac上正常)

Python 3.x 多处理、动态嵌套管理器在windows中不工作(在Mac上正常),python-3.x,windows,dynamic,nested,multiprocessing,Python 3.x,Windows,Dynamic,Nested,Multiprocessing,这是在线程中运行线程的一个非常简化的版本,我分别调用了不同的API组。有时这些组会按顺序运行,有时会同时运行。下面是在mac上运行良好的简化代码: from multiprocessing import Process, Manager def test(index): my_dict[index] = manager.dict() my_dict[index]['status'] = 200 def collate_tests(): apis = [] fo

这是在线程中运行线程的一个非常简化的版本,我分别调用了不同的API组。有时这些组会按顺序运行,有时会同时运行。下面是在mac上运行良好的简化代码:

from multiprocessing import Process, Manager

def test(index):
    my_dict[index] = manager.dict()
    my_dict[index]['status'] = 200

def collate_tests():
    apis = []
    for i in range(10):
        apis.append(Process(target=test, args=(f"{i}",)))

for index, value in enumerate(apis):
    print (f"Execute {index +1} of {len(apis)} Tests")
    value.start()

for api in apis:
    api.join()


if __name__ == '__main__':
    manager = Manager()
    my_dict = manager.dict()
    run_test = Process(target=collate_tests)

    run_test.start()
    run_test.join()

    for k,v in my_dict.items():
        print (k,v)
我得到了结果

0 {'status': 200}
1 {'status': 200}
2 {'status': 200}
4 {'status': 200}
3 {'status': 200}
5 {'status': 200}
6 {'status': 200}
7 {'status': 200}
9 {'status': 200}
8 {'status': 200}
在windows中,我可以

NameError: name ‘my_dict’ is not defined
因此,我将我的_dict作为args传递,然后我得到:

NameError: name ‘manager’ is not defined
如果我将manager作为参数传递

TypeError : can’t pickle weakref objects
所以我似乎无论如何都不能设定这条线

my_dict = manager.dict()
我甚至尝试在test()方法中实例化另一个管理器。但这也让我一事无成,因为我无法迭代创建的dict代理。有什么建议吗

请注意在中设置嵌套管理器的标准方法

if __name__ == '__main__':
这是不可行的,因为我不知道我的目录[索引]将提前什么“索引”。我正在尝试的东西在Windows中可能实现吗


PS-我已经浏览了网络,但没有找到我想要的解决方案。谢谢

执行嵌套字典并将其分配给键就可以了

def test(index, my_dict):
    
   nest = {}
    
   nest['status'] = 200
    
   my_dict[index] = nest