【问题标题】:Python Multiprocessing Manager - List Name Error?Python 多处理管理器 - 列表名称错误?
【发布时间】:2023-04-05 17:59:02
【问题描述】:

我正在尝试使用一个共享列表来更新从 Selenium 抓取的信息,以便我以后可以导出此信息或按照我的选择使用它。出于某种原因,它给了我这个错误:
NameError: name 'scrapedinfo' is not defined...

这对我来说真的很奇怪,因为我声明了全局列表并且我使用了 multiprocessing.Manager() 来创建列表。我已经多次检查了我的代码,这不是区分大小写的错误。我还尝试通过函数将列表作为变量传递,但这会产生其他问题并且不起作用。任何帮助是极大的赞赏!

from selenium import webdriver
from multiprocessing import Pool

def browser():  
    driver = webdriver.Chrome()
    return driver

def test_func(link):
    driver = browser()
    driver.get(link)

def scrape_stuff(driver):

    #Scrape things
    scrapedinfo.append(#Scraped Stuff)

def multip():
    manager = Manager()

    #Declare list here

    global scrapedinfo
    scrapedinfo = manager.list()

    links = ["https://stackoverflow.com/", "https://signup.microsoft.com/", "www.example.com"]
    chunks = [links[i::3] for i in range(3)]
    pool = Pool(processes=3)
    pool.map(test_func, chunks)
    print(scrapedinfo)

multip()

【问题讨论】:

  • 您使用的是 Windows 还是 linux?尝试将调用 multip() 放在 if __name__ == "__main__": 块中,以避免子进程中的重新导入问题。
  • 它在 if__name__ 中......我只是没有添加它,因为我的代码就像 3000 行兄弟。我正在使用 Windows 顺便说一句

标签:
python
list
python-multiprocessing