python threading multiprocess_Python的threading和multiprocessing

Python的threading

基础用法, 通过 threading.Thread() 创建线程, 然后 start() 和 join()

import time

import threading

def do_something(seconds):

print('Sleeping...')

time.sleep(seconds)

print('Done')

start = time.perf_counter()

threads = []

for _ in range(10):

t = threading.Thread(target = do_something, args=[1])

t.start()

threads.append(t)

for t in threads:

t.join()

finish = time.perf_counter()

print('Total: {}'.format(round(finish - start, 2)))

使用线程池. 使用as_completed, 可以阻塞并按完成顺序输出结果, 而直接用executor.map()会将结果收集完成后一起返回.

import time

import threading

from concurrent import futures

def do_something(seconds):

print('Sleeping...')

time.sleep(seconds)

return 'Done ' + str(seconds)

start = time.perf_counter()

with futures.ThreadPoolExecutor(max_workers=3) as executor:

secs = [3, 2.5, 2, 2.2, 0.5]

results = [executor.submit(do_something, sec) for sec in secs]

for f in futures.as_completed(results):

print(f.result())

# 注意区别

with futures.ThreadPoolExecutor() as executor:

secs = [3, 2.5, 2, 2.2, 0.5]

# 下面这行实际是阻塞的

results = executor.map(do_something, secs)

for result in results:

print(result)

finish = time.perf_counter()

print('Total: {}'.format(round(finish - start, 2)))

.

Python的multiprocessing

.在使用multiprocessing时, 子进程里的print()是会滞后打印的.

import time

import multiprocessing

import logging

def do_something(seconds):

print('Sleeping...', seconds)

time.sleep(seconds)

return 'Done ' + str(seconds)

if __name__ == '__main__':

multiprocessing.log_to_stderr()

logger = multiprocessing.get_logger()

logger.setLevel(logging.INFO)

start = time.perf_counter()

secs = [3.1, 3.5, 3.1, 3.2, 3.5, 3.3]

processes = []

for sec in secs:

p = multiprocessing.Process(target=do_something, args=(sec,))

p.start()

processes.append(p)

for p in processes:

p.join()

finish = time.perf_counter()

print('Total: {}'.format(round(finish - start, 2)))

print()

pool = multiprocessing.Pool(processes=3)

print(pool.map(do_something, secs))

finish = time.perf_counter()

print('Total: {}'.format(round(finish - start, 2)))

.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值