# 多进程实验版
# 进程数最好开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))