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

  经常用到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)

前一个就是你的参数。

转载于:https://www.cnblogs.com/errorpage/p/4500233.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值