pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

    <bdo id='zZdBY'></bdo><ul id='zZdBY'></ul>
<tfoot id='zZdBY'></tfoot>

      <i id='zZdBY'><tr id='zZdBY'><dt id='zZdBY'><q id='zZdBY'><span id='zZdBY'><b id='zZdBY'><form id='zZdBY'><ins id='zZdBY'></ins><ul id='zZdBY'></ul><sub id='zZdBY'></sub></form><legend id='zZdBY'></legend><bdo id='zZdBY'><pre id='zZdBY'><center id='zZdBY'></center></pre></bdo></b><th id='zZdBY'></th></span></q></dt></tr></i><div class="crbsvfd" id='zZdBY'><tfoot id='zZdBY'></tfoot><dl id='zZdBY'><fieldset id='zZdBY'></fieldset></dl></div>
    1. <small id='zZdBY'></small><noframes id='zZdBY'>

    2. <legend id='zZdBY'><style id='zZdBY'><dir id='zZdBY'><q id='zZdBY'></q></dir></style></legend>

      multiprocessing.Pool - PicklingError: Can't pickle &l

      multiprocessing.Pool - PicklingError: Can#39;t pickle lt;type #39;thread.lock#39;gt;: attribute lookup thread.lock failed(multiprocessing.Pool - PicklingError: Cant pickle lt;type thread.lockgt;: 屬性查找 thread.lock 失敗) - IT屋-程序

    3. <small id='tbxlR'></small><noframes id='tbxlR'>

      <legend id='tbxlR'><style id='tbxlR'><dir id='tbxlR'><q id='tbxlR'></q></dir></style></legend>

      • <i id='tbxlR'><tr id='tbxlR'><dt id='tbxlR'><q id='tbxlR'><span id='tbxlR'><b id='tbxlR'><form id='tbxlR'><ins id='tbxlR'></ins><ul id='tbxlR'></ul><sub id='tbxlR'></sub></form><legend id='tbxlR'></legend><bdo id='tbxlR'><pre id='tbxlR'><center id='tbxlR'></center></pre></bdo></b><th id='tbxlR'></th></span></q></dt></tr></i><div class="m3oyblf" id='tbxlR'><tfoot id='tbxlR'></tfoot><dl id='tbxlR'><fieldset id='tbxlR'></fieldset></dl></div>

            • <bdo id='tbxlR'></bdo><ul id='tbxlR'></ul>
              <tfoot id='tbxlR'></tfoot>
                  <tbody id='tbxlR'></tbody>
                本文介紹了multiprocessing.Pool - PicklingError: Can't pickle &lt;type 'thread.lock'&gt;: 屬性查找 thread.lock 失敗的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                問題描述

                限時送ChatGPT賬號..

                multiprocessing.Pool 快把我逼瘋了...
                我想升級許多軟件包,并且對于每個軟件包,我都必須檢查是否有更高版本.這是由 check_one 函數完成的.
                主要代碼在 Updater.update 方法中:在那里我創建了 Pool 對象并調用 map() 方法.

                multiprocessing.Pool is driving me crazy...
                I want to upgrade many packages, and for every one of them I have to check whether there is a greater version or not. This is done by the check_one function.
                The main code is in the Updater.update method: there I create the Pool object and call the map() method.

                代碼如下:

                def check_one(args):
                    res, total, package, version = args
                    i = res.qsize()
                    logger.info('
                [{0:.1%} - {1}, {2} / {3}]',
                        i / float(total), package, i, total, addn=False)
                    try:
                        json = PyPIJson(package).retrieve()
                        new_version = Version(json['info']['version'])
                    except Exception as e:
                        logger.error('Error: Failed to fetch data for {0} ({1})', package, e)
                        return
                    if new_version > version:
                        res.put_nowait((package, version, new_version, json))
                
                class Updater(FileManager):
                
                    # __init__ and other methods...
                
                    def update(self):    
                        logger.info('Searching for updates')
                        packages = Queue.Queue()
                        data = ((packages, self.set_len, dist.project_name, Version(dist.version)) 
                            for dist in self.working_set)
                        pool = multiprocessing.Pool()
                        pool.map(check_one, data)
                        pool.close()
                        pool.join()
                        while True:
                            try:
                                package, version, new_version, json = packages.get_nowait()
                            except Queue.Empty:
                                break
                            txt = 'A new release is avaiable for {0}: {1!s} (old {2}), update'.format(package,
                                                                                                      new_version,
                                                                                                      version)
                            u = logger.ask(txt, bool=('upgrade version', 'keep working version'), dont_ask=self.yes)
                            if u:
                                self.upgrade(package, json, new_version)
                            else:
                                logger.info('{0} has not been upgraded', package)
                        self._clean()
                        logger.success('Updating finished successfully')
                

                當我運行它時,我得到了這個奇怪的錯誤:

                When I run it I get this weird error:

                Searching for updates
                Exception in thread Thread-1:
                Traceback (most recent call last):
                  File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
                    self.run()
                  File "/usr/lib/python2.7/threading.py", line 505, in run
                    self.__target(*self.__args, **self.__kwargs)
                  File "/usr/local/lib/python2.7/dist-packages/multiprocessing/pool.py", line 225, in _handle_tasks
                    put(task)
                PicklingError: Can't pickle <type 'thread.lock'>: attribute lookup thread.lock failed
                

                推薦答案

                multiprocessing 通過 將任務(包括 check_onedata)傳遞給工作進程mp.SimpleQueue.與 Queue.Queue 不同,放在 mp.SimpleQueue 中的所有內容都必須是可選擇的.Queue.Queues 是不可挑選的:

                multiprocessing passes tasks (which include check_one and data) to the worker processes through a mp.SimpleQueue. Unlike Queue.Queues, everything put in the mp.SimpleQueue must be pickable. Queue.Queues are not pickable:

                import multiprocessing as mp
                import Queue
                
                def foo(queue):
                    pass
                
                pool=mp.Pool()
                q=Queue.Queue()
                
                pool.map(foo,(q,))
                

                產生此異常:

                UnpickleableError: Cannot pickle <type 'thread.lock'> objects
                

                您的 data 包括 packages,這是一個 Queue.Queue.這可能是問題的根源.

                Your data includes packages, which is a Queue.Queue. That might be the source of the problem.

                這是一個可能的解決方法:Queue 用于兩個目的:

                Here is a possible workaround: The Queue is being used for two purposes:

                1. 找出近似大小(通過調用qsize)
                2. 存儲結果以供日后檢索.

                我們可以使用 mp.Value,而不是調用 qsize,以便在多個進程之間共享一個值.

                Instead of calling qsize, to share a value between multiple processes, we could use a mp.Value.

                我們可以(并且應該)只返回來自對 check_one 的調用的值,而不是將結果存儲在隊列中.pool.map 將結果收集到自己制作的隊列中,并將結果作為 pool.map 的返回值返回.

                Instead of storing results in a queue, we can (and should) just return values from calls to check_one. The pool.map collects the results in a queue of its own making, and returns the results as the return value of pool.map.

                例如:

                import multiprocessing as mp
                import Queue
                import random
                import logging
                
                # logger=mp.log_to_stderr(logging.DEBUG)
                logger = logging.getLogger(__name__)
                
                
                qsize = mp.Value('i', 1)
                def check_one(args):
                    total, package, version = args
                    i = qsize.value
                    logger.info('
                [{0:.1%} - {1}, {2} / {3}]'.format(
                        i / float(total), package, i, total))
                    new_version = random.randrange(0,100)
                    qsize.value += 1
                    if new_version > version:
                        return (package, version, new_version, None)
                    else:
                        return None
                
                def update():    
                    logger.info('Searching for updates')
                    set_len=10
                    data = ( (set_len, 'project-{0}'.format(i), random.randrange(0,100))
                             for i in range(set_len) )
                    pool = mp.Pool()
                    results = pool.map(check_one, data)
                    pool.close()
                    pool.join()
                    for result in results:
                        if result is None: continue
                        package, version, new_version, json = result
                        txt = 'A new release is avaiable for {0}: {1!s} (old {2}), update'.format(
                            package, new_version, version)
                        logger.info(txt)
                    logger.info('Updating finished successfully')
                
                if __name__=='__main__':
                    logging.basicConfig(level=logging.DEBUG)
                    update()
                

                這篇關于multiprocessing.Pool - PicklingError: Can't pickle &lt;type 'thread.lock'&gt;: 屬性查找 thread.lock 失敗的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                相關文檔推薦

                What exactly is Python multiprocessing Module#39;s .join() Method Doing?(Python 多處理模塊的 .join() 方法到底在做什么?)
                Passing multiple parameters to pool.map() function in Python(在 Python 中將多個參數傳遞給 pool.map() 函數)
                multiprocessing.pool.MaybeEncodingError: #39;TypeError(quot;cannot serialize #39;_io.BufferedReader#39; objectquot;,)#39;(multiprocessing.pool.MaybeEncodingError: TypeError(cannot serialize _io.BufferedReader object,)) - IT屋-程序員軟件開
                Python Multiprocess Pool. How to exit the script when one of the worker process determines no more work needs to be done?(Python 多進程池.當其中一個工作進程確定不再需要完成工作時,如何退出腳本?) - IT屋-程序員
                How do you pass a Queue reference to a function managed by pool.map_async()?(如何將隊列引用傳遞給 pool.map_async() 管理的函數?)
                yet another confusion with multiprocessing error, #39;module#39; object has no attribute #39;f#39;(與多處理錯誤的另一個混淆,“模塊對象沒有屬性“f)
                • <bdo id='yphoE'></bdo><ul id='yphoE'></ul>
                • <tfoot id='yphoE'></tfoot>

                    <i id='yphoE'><tr id='yphoE'><dt id='yphoE'><q id='yphoE'><span id='yphoE'><b id='yphoE'><form id='yphoE'><ins id='yphoE'></ins><ul id='yphoE'></ul><sub id='yphoE'></sub></form><legend id='yphoE'></legend><bdo id='yphoE'><pre id='yphoE'><center id='yphoE'></center></pre></bdo></b><th id='yphoE'></th></span></q></dt></tr></i><div class="im8ku3h" id='yphoE'><tfoot id='yphoE'></tfoot><dl id='yphoE'><fieldset id='yphoE'></fieldset></dl></div>
                      <tbody id='yphoE'></tbody>

                    <small id='yphoE'></small><noframes id='yphoE'>

                    <legend id='yphoE'><style id='yphoE'><dir id='yphoE'><q id='yphoE'></q></dir></style></legend>

                          主站蜘蛛池模板: 高中学习网-高考生信息学习必备平台| China plate rolling machine manufacturer,cone rolling machine-Saint Fighter | 期货软件-专业期货分析软件下载-云智赢 | 快速门厂家-快速卷帘门-工业快速门-硬质快速门-西朗门业 | 江苏齐宝进出口贸易有限公司 | 泰来华顿液氮罐,美国MVE液氮罐,自增压液氮罐,定制液氮生物容器,进口杜瓦瓶-上海京灿精密机械有限公司 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 高中学习网-高考生信息学习必备平台 | 合肥废气治理设备_安徽除尘设备_工业废气处理设备厂家-盈凯环保 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 辐射色度计-字符亮度测试-反射式膜厚仪-苏州瑞格谱光电科技有限公司 | 硫化罐-胶管硫化罐-山东鑫泰鑫智能装备有限公司 | 紫外可见光分光度计-紫外分光度计-分光光度仪-屹谱仪器制造(上海)有限公司 | 土壤墒情监测站_土壤墒情监测仪_土壤墒情监测系统_管式土壤墒情站-山东风途物联网 | 泰国专线_泰国物流专线_广州到泰国物流公司-泰廊曼国际 | 定硫仪,量热仪,工业分析仪,马弗炉,煤炭化验设备厂家,煤质化验仪器,焦炭化验设备鹤壁大德煤质工业分析仪,氟氯测定仪 | 万濠投影仪_瑞士TRIMOS高度仪_尼康投影仪V12BDC|量子仪器 | 防腐木批发价格_深圳_惠州_东莞防腐木厂家_森源(深圳)防腐木有限公司 | 背压阀|减压器|不锈钢减压器|减压阀|卫生级背压阀|单向阀|背压阀厂家-上海沃原自控阀门有限公司 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 热工多功能信号校验仪-热电阻热电偶校验仿真仪-金湖虹润仪表 | 数码管_LED贴片灯_LED数码管厂家-无锡市冠卓电子科技有限公司 | 防爆型气象站_农业气象站_校园气象站_农业四情监测系统「山东万象环境科技有限公司」 | 牛皮纸|牛卡纸|进口牛皮纸|食品级牛皮纸|牛皮纸厂家-伽立实业 | 东莞ERP软件_广州云ERP_中山ERP_台湾工厂erp系统-广东顺景软件科技有限公司 | 玻璃瓶厂家_酱菜瓶厂家_饮料瓶厂家_酒瓶厂家_玻璃杯厂家_徐州东明玻璃制品有限公司 | 彭世修脚_修脚加盟_彭世修脚加盟_彭世足疗加盟_足疗加盟连锁_彭世修脚技术培训_彭世足疗 | 物流之家新闻网-最新物流新闻|物流资讯|物流政策|物流网-匡匡奈斯物流科技 | 广州物流公司_广州货运公司_广州回程车运输 - 万信物流 | 气动隔膜阀_气动隔膜阀厂家_卫生级隔膜阀价格_浙江浙控阀门有限公司 | 冷热冲击试验箱_温度冲击试验箱价格_冷热冲击箱排名_林频厂家 | 聚合甘油__盐城市飞龙油脂有限公司 | 搜木网 - 木业全产业链交易平台,免费搜货、低价买货! | 北京开业庆典策划-年会活动策划公司-舞龙舞狮团大鼓表演-北京盛乾龙狮鼓乐礼仪庆典策划公司 | 东莞动力锂电池保护板_BMS智能软件保护板_锂电池主动均衡保护板-东莞市倡芯电子科技有限公司 | 美缝剂_美缝剂厂家_美缝剂加盟-地老板高端瓷砖美缝剂 | 三佳互联一站式网站建设服务|网站开发|网站设计|网站搭建服务商 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 数码管_LED贴片灯_LED数码管厂家-无锡市冠卓电子科技有限公司 | 衬塑管道_衬四氟管道厂家-淄博恒固化工设备有限公司 | 昆明挖掘机修理厂_挖掘机翻新再制造-昆明聚力工程机械维修有限公司 | 莱州网络公司|莱州网站建设|莱州网站优化|莱州阿里巴巴-莱州唯佳网络科技有限公司 |