Rya*_*yan 6 python multiprocessing python-3.x
我有一个 for 循环,它会从一组 URL 中获取一个 URL 并访问该 URL 并执行其他一些操作,但它花费了很长时间,所以我想我可以通过一些多重处理来加速它,但我很挣扎这样做。
感谢您的帮助。
def accessAndSaveFiles(urlSet, user, verboseFlag):
with multiprocessing.Pool(os.cpu_count()) as pool:
pool.starmap(processURL, zip(itertools.repeat(urlSet), user, verboseFlag))
def processURL(url, user, verboseFlag):
filePath = some_path
img_data = requests.get(url, allow_redirects=True)
open(filePath, 'wb').write(img_data.content)
def main():
...
accessAndSaveFiles(urlSet, user, verboseFlag)
...
Run Code Online (Sandbox Code Playgroud)
我在“pool.starmap(processURL, zip(itertools.repeat(urlSet), user, verboseFlag))”行上收到错误,提示“TypeError: zip argument #3 must support iteration”。我不想迭代这个项目,我只想每次发送相同的值。
假设 urlset 是一个可迭代的,你应该使用
pool.starmap(processURL, zip(urlSet, repeat(user), repeat(verboseFlag)))
Run Code Online (Sandbox Code Playgroud)
这是因为您想要迭代 urlset,但每个 processURL 实例具有相同的用户和 verboseFlag(因此,重复)
作为参考,您应该查看Python multiprocessing pool.map 的多个参数
迭代时 zip 的输出应该类似于
[('www.google.com','user1',True),('www.goodle.uk','user1',True),]
Run Code Online (Sandbox Code Playgroud)
为了pool.starmap理解它。
| 归档时间: |
|
| 查看次数: |
13994 次 |
| 最近记录: |