星图结合tqdm?

星图结合tqdm?,第1张

星图结合tqdm?

不可能

starmap()
,但是添加补丁是可能的
Pool.istarmap()
。它基于的代码
imap()
。您要做的就是创建
istarmap.py
-file并导入模块以应用补丁,然后再进行常规的multiprocessing-
imports。

Python <3.8

# istarmap.py for Python <3.8import multiprocessing.pool as mppdef istarmap(self, func, iterable, chunksize=1):    """starmap-version of imap    """    if self._state != mpp.RUN:        raise ValueError("Pool not running")    if chunksize < 1:        raise ValueError( "Chunksize must be 1+, not {0:n}".format(     chunksize))    task_batches = mpp.Pool._get_tasks(func, iterable, chunksize)    result = mpp.IMapIterator(self._cache)    self._taskqueue.put(        ( self._guarded_task_generation(result._job,         mpp.starmapstar,         task_batches), result._set_length        ))    return (item for chunk in result for item in chunk)mpp.Pool.istarmap = istarmap

Python 3.8以上

# istarmap.py for Python 3.8+import multiprocessing.pool as mppdef istarmap(self, func, iterable, chunksize=1):    """starmap-version of imap    """    self._check_running()    if chunksize < 1:        raise ValueError( "Chunksize must be 1+, not {0:n}".format(     chunksize))    task_batches = mpp.Pool._get_tasks(func, iterable, chunksize)    result = mpp.IMapIterator(self)    self._taskqueue.put(        ( self._guarded_task_generation(result._job,         mpp.starmapstar,         task_batches), result._set_length        ))    return (item for chunk in result for item in chunk)mpp.Pool.istarmap = istarmap

然后在您的脚本中:

import istarmap  # import to apply patchfrom multiprocessing import Poolimport tqdmdef foo(a, b):    for _ in range(int(50e6)):        pass    return a, bif __name__ == '__main__':    with Pool(4) as pool:        iterable = [(i, 'x') for i in range(10)]        for _ in tqdm.tqdm(pool.istarmap(foo, iterable),     total=len(iterable)): pass


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5667438.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存