我正在构建一个多线程网络爬虫。
我启动了一个获得第一个n
href链接并解析一些数据的线程。然后,它应该将这些链接添加到其他线程可以访问的“访问”列表,并将数据添加到将在程序完成时打印的全局映射。然后线程启动新的n
个新线程,它们都做同样的事情。
如何设置所有线程都可以访问的访问网站的全局列表以及所有线程也可以写入的全局地图。
答案 0 :(得分:8)
您无法在进程之间共享数据。这并不意味着您无法共享信息。
通常的方法是使用负责此工作的特殊进程(服务器):维持状态;在您的情况下,访问链接列表。
另一种方法是使用ETS(或Mnesia数据库构建在ETS上),用于在进程之间共享信息。
答案 1 :(得分:1)
为了澄清,erlang / elixir使用进程而不是线程。
给出一个元素列表,一个通用的方法:
processed
的空列表会保存到ets,dets,mnesia或某些数据库。processed
列表进行过滤,以便不会不必要地重复任务。完成所有任务后,
processed
列表中。崩溃或超时的任务可以采用不同的方式处理。