python多任务demo

import threading
import time
from multiprocessing.dummy import Pool
import asyncio
import random


def fun1(num_array):
    result = 1
    for i in num_array:
        result = result * i


async def fun2(num_array):
    result = 1
    for i in num_array:
        result = result * i


if __name__ == '__main__':
    # 生成数据
    start_start = time.time()
    c = []
    for i in range(1, 50000):
        b = []
        for j in range(1, 1000):
            a = random.uniform(1, 1000)
            b.append(a)
        c.append(b)
    # 多线程
    start_threading = time.time()
    multithread = []
    for i in c:
        one_thread = threading.Thread(target=fun1, args=(i,))
        multithread.append(one_thread)
    for i in multithread:
        i.start()
    for j in multithread:
        j.join()
    print('多线程程序时间' + str(time.time() - start_threading))

    # 多进程(进程池)
    start_pool = time.time()
    pool = Pool(100)
    pool.map(fun1, c)
    pool.close()
    pool.join()
    print('多进程程序时间' + str(time.time() - start_pool))

    # 协程
    strat_asyncio = time.time()
    stasks = []
    for i in c:
        task = fun2(i)
        # 创建任务
        one_task = asyncio.ensure_future(task)
        # 形成任务列表
        stasks.append(one_task)
    # 创建一个事件循环对象
    loop = asyncio.get_event_loop()
    # 将任务列表封装到wait中,开始执行
    loop.run_until_complete(asyncio.wait(stasks))
    # 还可以绑定回调函数,在返回时调用
    print('协程运行时间' + str(time.time() - strat_asyncio))
    print('总的时间' + str(time.time() - start_start))
python```
posted @ 2023-01-10 11:26  aleiyoy  阅读(24)  评论(0编辑  收藏  举报