python3.5使用threadpool的一个问题

发布于 2022-09-04 04:43:08 字数 1423 浏览 14 评论 0

import os
import re
import urllib.parse
import urllib.request

import threadpool


def download_file(url):
    print("Begin download {}".format(url))
    urlhandler = urllib.request.urlopen(url)
    p = urllib.parse.urlparse(url).path
    fname = os.path.basename(re.findall(r"item/(.*?)\W", p, re.S)[0]) + ".html"
    with open(fname, 'wb') as f:
        while True:
            chunk = urlhandler.read(1024)
            if not chunk:
                break
            f.write(chunk)


def main():
    urls = [r"http://baike.baidu.com/item/wiki/97755",
            r"http://baike.baidu.com/item/Biosteel?fr=Biosteel",
            r"http://baike.baidu.com/item/HTML/"]
    # 创建大小为2的线程池
    pool_size = 2
    pool = threadpool.ThreadPool(pool_size)
    # 创建工作请求
    requests = threadpool.makeRequests(download_file, urls)
    [pool.putRequest(req) for req in requests]
    # 将具体的请求放入线程池
    print("putting request to pool")
    pool.putRequest(threadpool.WorkRequest(download_file, args=[r"http://baike.baidu.com/item/duang/16824760",]))
    # 处理任务队列中的新请求
    pool.poll()
    pool.wait()

    print("destory all threads before exit...")
    pool.dismissedWorkers(pool_size, do_join=True)


if __name__ == '__main__':
    main()

代码如上所示,在Python3.5的运行报错:

pool.dismissedWorkers(pool_size, do_join=True)
TypeError: 'list' object is not callable

请问一下是哪里错了,应该怎么修改呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

递刀给你 2022-09-11 04:43:08

你都用 Python 3.5 了,还用什么 threadpool 啊,直接上 concurrent.futures 啊。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文