Python 2.5 - 多线程for循环

Mat*_*łło 4 python multithreading for-loop

我有一段代码:

for url in get_lines(file):
    visit(url, timeout=timeout)
Run Code Online (Sandbox Code Playgroud)

它从文件中获取URL并在for循环中访问它(通过urllib2).

可以在几个线程中执行此操作吗?例如,同时进行10次访问.


我试过了:

for url in get_lines(file):
    Thread(target=visit, args=(url,), kwargs={"timeout": timeout}).start()
Run Code Online (Sandbox Code Playgroud)

但它不起作用 - 没有效果,URL正常访问.


功能访问的简化版本:

def visit(url, proxy_addr=None, timeout=30):
    (...)
    request = urllib2.Request(url)
    response = urllib2.urlopen(request)
    return response.read()
Run Code Online (Sandbox Code Playgroud)

Joe*_*ntz 5

要扩展senderle的答案,您可以在多处理中使用Pool类来轻松完成此操作:

from multiprocessing import Pool
pool = Pool(processes=5)
pages = pool.map(visit, get_lines(file))
Run Code Online (Sandbox Code Playgroud)

当map函数返回时,"pages"将是URL的内容列表.您可以将进程数调整为适合您系统的任何数据.