码迷,mamicode.com
首页 > 编程语言 > 详细

[Python] threadpool1.2.7回调函数的参数设置

时间:2015-05-13 14:36:03      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

  经常用到threadpool这个库,用起来很简单:

  

        pool = threadpool.ThreadPool(threadnum)
        reqs = threadpool.makeRequests(repeater.get_rq, args_list=arg_list, callback=result_handle_func)
        [pool.putRequest(req) for req in reqs]
        pool.wait()
        pool.dismissWorkers(threadnum)

  如上,是最经典的调用方法,关键在第二句,在这里我经常遇到问题,特别是参数的问题。如果是单个的参数,那么很简单,这里的args_list只需要是个列表,里面是所有参数即可。

  但是情况不总是那么简单,比如,我的repeater.get_rq函数是这样的:

    @staticmethod
    def get_rq(*opt):
        ‘‘‘
        :param opt: 字典包括了 url   want ,前者是url,后者是body 或者header
        :return:
        ‘‘‘
        opt = opt[0]
        if opt == {}:
            return "Not a Lucky day?ah?"

        url = opt["url"]
        want = opt["want"]
        cookies = None
        if cookies in opt.keys():
            cookies = opt[cookies]
        url = urlinfo(url).url
        header = getrandomheader()
        if cookies:
            rq = requests.get(url, headers=header,cookies=cookies)
        else:
            rq = requests.get(url, headers=header)
        if want=="body":
            return rq.text
        else:
            return rq.headers

我希望这样使用这个函数:

    temp = {
        "url":"www.wooyun.org",
        "want":"body",
    }
    a = repeater.get_rq(temp)

看起来这里用了个*很多余,其实就是为了适配threadpool函数。

看threadpool代码可以知道,如果你的参数不是元组,那么会封装为列表再传参。此时,你的回调函数接收到的参数为:

[你的参数],None

然后threadpool会这样调用:

result = request.callable(*request.args, **request.kwds)

前一个就是你的参数。

[Python] threadpool1.2.7回调函数的参数设置

标签:

原文地址:http://www.cnblogs.com/errorpage/p/4500233.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!