正如我在评论中建议的那样,我认为使用a
multiprocessing.pool.ThreadPool是合适的-
因为它可以自动处理许多您在代码中手动执行的线程管理。一旦所有线程都通过
ThreadPool的
apply_async()方法调用排队等待处理,唯一需要做的就是等待它们全部完成执行(当然,除非您的代码可以做其他事情)。
我已经将链接的答案中的代码翻译为另一个相关问题,因此它与您在使当前上下文中的内容易于理解时所执行的 *** 作更加相似。
from multiprocessing.pool import ThreadPoolfrom random import randintimport threadingimport timeMAX_THREADS = 5print_lock = threading.Lock() # Prevent overlapped printing from threads.def query_data(trade): trade_id = trade[0][1][:6] time.sleep(randint(1, 3)) # Simulate variable working time for testing. with print_lock: print(trade_id)def process_trades(trade_list): pool = ThreadPool(processes=MAX_THREADS) results = [] while(trade_list): trade = trade_list.pop() results.append(pool.apply_async(query_data, (trade,))) pool.close() # Done adding tasks. pool.join() # Wait for all tasks to complete.def test(): trade_list = [[['abc', ('%06d' % id) + 'defghi']] for id in range(1, 101)] process_trades(trade_list)if __name__ == "__main__": test()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)