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)
要扩展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的内容列表.您可以将进程数调整为适合您系统的任何数据.