【问题标题】:Python - Iterator is going character by character, not line by line (when multiprocessing)Python - 迭代器逐个字符,而不是逐行(多处理时)
【发布时间】:2017-06-28 16:14:04
【问题描述】:

我正在尝试遍历 URL 列表,但我得到的输出是逐个字符的,而不是逐行的。在没有多处理的情况下运行时,它可以完美运行。但是,当我尝试多进程时,它会开始逐字符读取。这是为什么呢?

我已经广泛阅读了有关如何逐行阅读的内容,并且在我看来,我的做法是正确的。我哪里错了?无需多处理即可完美运行。

import urllib.request
import urllib.error
import multiprocessing

def findAdmin(URLList):
    # Loops through links
    for link in URLList:
        print (link)

# Multi-processing worker
def mp_worker(URLList):
    findAdmin(URLList)

# Multi-processing handler
def mp_handler(URLList):
    p = multiprocessing.Pool(2)
    p.map(mp_worker, URLList)


if __name__ == '__main__':
    URLList = open('sites.txt','r')
    mp_handler(URLList)
    ## When running just findAdmin(URLList), the program works flawlessly.
    # findAdmin(URLList)

所以,我在多处理方面一定做错了。但我就是想不通它是什么。非常感谢任何帮助!

【问题讨论】:

  • p.map(mp_worker, URLList) 使用 URLList 的每个 元素 作为工作参数,而不是整个 URLList 将作业提交到池中。此外,这不是一个列表。
  • 这是一个文件,它正在尝试被每个元素读取。我现在知道了。我如何编写解决方案?

标签: python iterator multiprocessing


【解决方案1】:

.map() 在 URLList 中的 each 条目上运行 mp_worker - for 循环是不必要的。将findAdmin 更改为:

def findAdmin(URLList):
    print (link)

【讨论】:

  • 感谢您的帮助,但我刚刚尝试过 - 遇到了同样的问题。它似乎没有改变任何东西。
  • 查看更新——使用map时不需要for循环
  • 这就是解决方案。非常感谢您的帮助。
猜你喜欢
  • 2012-10-20
  • 2013-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
相关资源
最近更新 更多