python多处理星图progressbar
因为我的worker函数中需要几个参数,所以我使用starmap,但是如何显示TQM的进度呢python多处理星图progressbar,python,multiprocessing,tqdm,Python,Multiprocessing,Tqdm,因为我的worker函数中需要几个参数,所以我使用starmap,但是如何显示TQM的进度呢 从itertools导入重复 来自多处理导入池 def func(i、a、b、c): 打印(i、a、b、c) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 池=池(线程数) a、 b,c='a','b','c' 星图(func,zip(范围(100),重复(a),重复(b),重复(c))) pool.close() pool.join() 那么,我如何使用TQ
从itertools导入重复
来自多处理导入池
def func(i、a、b、c):
打印(i、a、b、c)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
池=池(线程数)
a、 b,c='a','b','c'
星图(func,zip(范围(100),重复(a),重复(b),重复(c)))
pool.close()
pool.join()
那么,我如何使用TQM来显示预压力呢?您应该创建一个进程来监视其他进程传递的信号,并更新您的TQM。给你一个简单的例子:
from multiprocessing import Queue, Pool, Process
def listener(q, num):
tbar = tdqm(total = num)
for i in iter(q.get, None):
tbar.update()
tbar.close()
def worker(q):
do something.
queue.put(1)
if __name__ == "__main__":
....
q.put(None) #when you finish your work, put a None signal to finish the listener.
是否可以将函数更改为接收单个元组参数而不是多个元组参数?这将允许您使用
imap
而不是starmap
,因此主进程可以循环输入结果以更新进度条。不幸的是,没有istarmap
!如果只需要对一个无法修改的函数(例如,它来自库)执行此操作,则可以使用顶级定义的def包装器(tup):func(*tup)
函数对其进行包装。您将发现一个添加了.istarmap()
的补丁和一个带有tqdm
的示例。答案应该更直接,与问题相关,并建议代码本身的更改。