python多线程无法使用多核处理器,所以这里记录如何使用多进程。
参考文章
一般使用:apply_async 和 map_async,不阻塞执行。
# -*- coding: utf-8 -*-import multiprocessingimport timedef func(msg):print('msg: ', msg)time.sleep(1)print('********')return 'func_return: %s' % msgif __name__ == '__main__':# apply_asyncprint('\n--------apply_async------------')pool = multiprocessing.Pool(processes=4)results = []for i in range(10):msg = 'hello world %d' % iresult = pool.apply_async(func, (msg, ))results.append(result)print('apply_async: 不堵塞')pool.close() # 关闭进程池,表示不能再往进程池中添加进程,需要在join之前调用pool.join() # 等待进程池中的所有进程执行完毕for i in results:if i.ready(): # 进程函数是否已经启动了if i.successful(): # 进程函数是否执行成功print(i.get()) # 进程函数返回值args = [1, 2, 4, 5, 7, 8]# map_asyncprint('\n--------map_async------------')pool = multiprocessing.Pool(processes=5)result = pool.map_async(func, args)print('ready: ', result.ready())print('不堵塞')result.wait() # 等待所有进程函数执行完毕if result.ready(): # 进程函数是否已经启动了if result.successful(): # 进程函数是否执行成功print(result.get()) # 进程函数返回值
