[Python] threadpool1.2.7回呼函數的參數設定

來源:互聯網
上載者:User

標籤:

  經常用到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回呼函數的參數設定

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.