我想使用Python中的多线程和队列(以限制线程数量)迭代字典中的字典(模拟目录或网站的结构)。我创建mainDict来模拟这个mainDict = {"Layer1": {"Layer11": 1, "Layer12": 1, "Layer13": 1, "Layer14": 1, "Layer15": 1," Layer16": 1},
"Layer2": {"Layer21": 2, "Layer22": 2, "Layer23": 2, "Layer24": 2, "Layer25": 2, "Layer26": 2},
"Layer3": {"Layer31": 4, "Layer32": 4, "Layer33": 4, "Layer34": 4, "Layer35": 4, "Layer36": 4},
"Layer4": {"Layer41": 8, "Layer42": 8, "Layer43": 8, "Layer44": 8, "Layer45": 8, "Layer46": 8},
"Layer5": {"Layer51": 16, "Layer52": 16, "Layer53": 16, "Layer54": 16, "Layer55": 16, "Layer56": 16},
"Layer6": {"Layer61": 32, "Layer62": 32, "Layer63": 32, "Layer64": 32, "Layer65": 32, "Layer66": 32}}
以及一个Crawler类,为mainDict的每个第一个子字典实例化一个爬虫程序。在
我想创建2个线程(一次有限数量的线程/爬虫程序以减少CPU使用量),它们可以爬网到层(I)(I=1..6)。每个线程将爬行直到到达“树”的叶子,然后移动到下一个字典(例如,爬虫程序0将遍历第1层,爬虫程序1将遍历第2层,完成后遍历第3层…)。在
^{pr2}$
我有两个问题:它只创建2个线程,并获取队列的前2个元素(子字典),然后不执行任何操作,甚至不退出;它保持挂起状态
在threader()函数中,它说它将获得一个子字典,但会迭代另一个子字典,如crawallleaves()中的print所示
我想学Python和线程,但我不知道我做错了什么,你能帮我做这个吗?在