python多进程、多线程、协程demo

# 多进程实验版
# 进程数最好开cpu数量的一半
import random
import time
from multiprocessing import Pool, cpu_count, Process


def loop(num, second):
    for page in range(20):
        time.sleep(second)
        print("进程号{}完成{}号任务,用时{}秒".format(num, page, second))


if __name__ == "__main__":
    start_time = time.time()
    process_list = []
    for x in range(cpu_count() // 2):
        index = random.randint(2, 10)
        p = Process(target=loop, args=(x, index, ))
        p.start()
        process_list.append(p)
    for pro in process_list:
        pro.join()
    print("用时{}".format(time.time() - start_time))
# 多线程实验版
from concurrent.futures import wait, ThreadPoolExecutor
import random
import time


def loop(num, second):
    time.sleep(5)
    print("线程号{}完成任务,用时{}秒".format(num, second))


if __name__ == "__main__":
    start_time = time.time()
    executor = ThreadPoolExecutor(5)
    fs = [executor.submit(loop, num, random.randint(1, 10)) for num in range(20)]
    wait(fs)
    executor.shutdown()
    print("用时{}".format(time.time() - start_time))
def sec_deal(self):
        objs = BooksModel.select().where(BooksModel.status == 1)
        executor = ThreadPoolExecutor(cpu_count() // 2)
        fs = [executor.submit(self.uploads, obj) for obj in objs]
        wait(fs)
        executor.shutdown()
        # for obj in objs:
        #     self.uploads(obj)


    def uploads(self, obj1):
        if obj1.pdf_id:
            path = "D:/迅雷下载/{}".format(obj1.pdf_id)
            if os.path.isfile(path):
                file_id = "app-static/2023-05-28/{}.pdf".format(self.generate_unique_id(12))
                print("http://hsy-ijj-static.ijianji.cn/{}".format(file_id))
                Tos().put_object_from_file(obj_id=file_id, file_url=path)
                obj = BooksModel.get(BooksModel.id == obj1.id)
                obj.status = 0
                obj.save(

 

# 协程 IO多路复用
import asyncio
import aiohttp
import random
import time
headers = {
    "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36",
}

async def get(url):
    async with aiohttp.ClientSession(headers=headers, connector=aiohttp.TCPConnector(ssl=False)) as request:
        async with request.get(url) as response:
            return await response.text()


def loop(num, second):
    time.sleep(second)
    print("协程号{}任务完成,用时{}秒".format(num, second))


async def start():
    tasks = [loop(num, random.randint(2, 10)) for num in range(20)]
    await asyncio.gather(*tasks)


if __name__ == "__main__":
    start_time = time.time()
    asyncio.run(start())
    print("用时{}".format(time.time()-start_time))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值