将进度条应用于 multiprocessing.Pool(threads).apply(function)
apply progress bar to multiprocessing.Pool(threads).apply(function)
我想为没有要传递的参数的函数应用多处理池的进度条。 (将进度条应用于 multiprocessing.Pool(threads).apply(function) )
accounts = []
def a():
for account in accounts:
while True:
try:
#tasks
exept:
continue
break
def main():
threads = int(input('Enter Threads: '))
p= multiprocessing.Pool(threads)
p.apply(a)
if __name__ == '__main__':
main()
所以我想在一个进度条中查看所有线程中帐户的进度!
您当前的代码没有执行任何类型的多线程,因为 apply
方法会阻塞,直到 a
完成处理。此外,a
正在一个接一个地处理 accounts
的每个元素,而您真正想要做的是根据您拥有的线程数并行处理 accounts
的元素你的游泳池。
在下面的代码中,函数 a
现在只处理一个帐户。主进程为 accounts
列表的每个元素调用方法 apply_async
,该方法不会阻塞,指定 回调 函数在 a
时调用已完成处理并返回结果(隐式 returns None
)。此回调函数只是将进度条前进一个单位。
from multiprocessing.pool import ThreadPool
import tqdm
def a(account):
""" process account """
import time
# simulate doing something
time.sleep(.5)
def update_progress_bar(result):
# result is return code from a, which is None
progress_bar.update(1) # one more task completed
def main():
global progress_bar
accounts = [1,2,3,4,5,6,7,8,9,10,11,12]
num_threads = int(input('Enter number of threads: '))
p = ThreadPool(num_threads)
with tqdm.tqdm(total=len(accounts)) as progress_bar:
for account in accounts:
p.apply_async(a, args=(account,), callback=update_progress_bar)
# wait for all submitted tasks to complete:
p.close()
p.join()
if __name__ == '__main__':
main()
我想为没有要传递的参数的函数应用多处理池的进度条。 (将进度条应用于 multiprocessing.Pool(threads).apply(function) )
accounts = []
def a():
for account in accounts:
while True:
try:
#tasks
exept:
continue
break
def main():
threads = int(input('Enter Threads: '))
p= multiprocessing.Pool(threads)
p.apply(a)
if __name__ == '__main__':
main()
所以我想在一个进度条中查看所有线程中帐户的进度!
您当前的代码没有执行任何类型的多线程,因为 apply
方法会阻塞,直到 a
完成处理。此外,a
正在一个接一个地处理 accounts
的每个元素,而您真正想要做的是根据您拥有的线程数并行处理 accounts
的元素你的游泳池。
在下面的代码中,函数 a
现在只处理一个帐户。主进程为 accounts
列表的每个元素调用方法 apply_async
,该方法不会阻塞,指定 回调 函数在 a
时调用已完成处理并返回结果(隐式 returns None
)。此回调函数只是将进度条前进一个单位。
from multiprocessing.pool import ThreadPool
import tqdm
def a(account):
""" process account """
import time
# simulate doing something
time.sleep(.5)
def update_progress_bar(result):
# result is return code from a, which is None
progress_bar.update(1) # one more task completed
def main():
global progress_bar
accounts = [1,2,3,4,5,6,7,8,9,10,11,12]
num_threads = int(input('Enter number of threads: '))
p = ThreadPool(num_threads)
with tqdm.tqdm(total=len(accounts)) as progress_bar:
for account in accounts:
p.apply_async(a, args=(account,), callback=update_progress_bar)
# wait for all submitted tasks to complete:
p.close()
p.join()
if __name__ == '__main__':
main()