在当前的开发中,由于对于性能的需求。需要充分利用计算机资源。在i/o密集型场景下,尤其需要使用多线程和协程。
目的:构建多线程和协程场景,实现资源充分利用。
import asyncio import time import threading tp_dict= {} async def parseNode(num,times): print("协程%d-开始执行"%num) await asyncio.sleep(times) print('协程%d执行结束'%num) tp_dict[num] = num def parseNodes(num,times): print("协程%d-开始执行"%num) # await asyncio.sleep(times) time.sleep(times) print('线程%d执行结束'%num) tp_dict[num] = num async def task_info(): task_list = [i for i in range(1,300)] task_lists = [] for x in task_list: task = asyncio.create_task(parseNode(x,1,)) task_lists.append(task) for y in task_lists: await y def thread_test(): task_list = [] for i in range(1,300): t = threading.Thread(target=parseNodes,args=(i,1)) t.start() task_list.append(t) for t1 in task_list: t1.join() if __name__ == '__main__': asyncio.run(task_info()) # thread_test() print('tp_list:%s'%str(tp_dict)) print('last_run') print(len(tp_dict))
当前的项目中,由于算法的需要,需要同时对多个不同的对象进行计算,这些对象可以同时运行,并且需要在指定任务运行完成后,主线程和多线程同步。即主线程需要等多线程运行完成后再运行。
在实现方面比较简单。只是对于第一次使用这个模块的人来说,由于没有主线程和派生的多线程的概念,所以可能会写出主线程和多线程不同步的问题。即多线程还没有运行完,主线程已经开始执行后续的方法了。因为在实际的场景中可能会遇到需要多线程执行完,主线程才能继续运行的情况。