进程池

import multiprocessing
import time


# 多进程编程
def get_html(n):
time.sleep(n)
print('sub progress success')
return n


if __name__ == '__main__':
# 使用进程池
pool = multiprocessing.Pool(multiprocessing.cpu_count())
# imap,按照顺序打印
for result in pool.imap(get_html, [1, 5, 3]):
print('{} sleep suceess'.format(result))
# imap,哪个先执行完打印哪个
for result in pool.imap_unordered(get_html, [1, 5, 3]):
print('{} sleep suceess'.format(result))

线程池

from concurrent.futures import ThreadPoolExecutor
import time

# 线程池
# 主线程中可以获取某一个线程的状态或者某一个任务的状态,以及返回值
# 当一个线程完成的时候,我们主线程能立即知道
# futures可以让多线程和多进程编码接口一致


def get_html(times):
    time.sleep(times)
    print('get page {} success'.format(times))
    return times


executor = ThreadPoolExecutor(max_workers=1)
# 通过submit函数提交执行的函数到线程池中,submit是立即返回,是非阻塞的函数
# submit(fn, *args, **kwargs)
task1 = executor.submit(get_html, (3))
task2 = executor.submit(get_html, (2))

# done方法用判断某个任务是否完成
print(task1.done())
# cancel不能取消任务状态为执行中或者执行完成的task
print(task2.cancel())
time.sleep(3)
print(task1.done())

# result方法可以获取task的执行结果
print(task1.result())

 

posted on 2022-09-28 11:23  topass123  阅读(48)  评论(0编辑  收藏  举报