OpenWPMs run_custom_function 如何影响范围?

How does OpenWPMs run_custom_function affect the Scope?

我正在尝试使用 OpenWPM 抓取一些网站并编写了一个自定义函数 get_pp_links(),它向全局列表添加了一些内容。但是当我将它与 OpenWPMs 一起使用时 run_custom_function(),我附加到列表的东西消失了。

我的脚本如下所示:

from automation import CommandSequence, TaskManager

NUM_BROWSERS = 2
alist = [1]

def get_pp_links(**kwargs):
    alist.append(1)

def main():
    # The list of sites that we wish to crawl
    with open("top-100.csv", "r") as file:
        csv_reader = reader(file)
        sites = list(csv_reader)

    # Loads the default manager preferences
    manager_params, browser_params = TaskManager.load_default_params(NUM_BROWSERS)

    # Update browser configuration
    for i in range(NUM_BROWSERS):
        browser_params[i]['headless'] = True

    # Instantiates the measurement platform
    manager = TaskManager.TaskManager(manager_params, browser_params)

    for site in sites:
        command_sequence = CommandSequence.CommandSequence("https://"+site[1], reset=True)
        command_sequence.get(sleep=0, timeout=60)
        command_sequence.run_custom_function(get_pp_links, ())
        manager.execute_command_sequence(command_sequence)

    # Shuts down the browsers and waits for the data to finish logging
    manager.close()
    print(alist)

if __name__ == "__main__":
    main()

并且 top-100.cvs 包含域列表:

92,twitch.tv
93,forbes.com
94,bbc.com

我希望列表随着每个扫描的站点而增长,因此结果看起来像 [1,1,1,1],但打印的列表只有 [1]

我认为这与 run_custom_function() 有某种联系,因为当我直接调用 get_pp_links() 时,问题没有出现。

这是因为 OpenWPM 为每个生成的浏览器创建了一个新进程。

由于每个进程都与父进程相互隔离,因此会发生以下情况。

  1. alist 在主进程中创建。
  2. alist 被复制到浏览器进程中。
  3. alist 在浏览器进程中被 get_pp_links 改变
  4. 变化停留在浏览器进程中,您无法在父进程中观察到它们。

您可以通过使用 multiprocessing.SyncManager 并在进程之间同步列表来解决这个问题。