Python 多进程与多线程优化

1 篇文章 0 订阅
1 篇文章 0 订阅

Python 多进程与多线程优化

Python 多线程代码

from time import ctime, sleep
import threading
import numpy as np
import collections
  
loops = [1e6,1e7]
class MyThread(threading.Thread):
    def __init__(self, func, args, name=''):
        threading.Thread.__init__(self)
        self.name = name
        self.func = func
        self.args = args
        self.result = self.func(*self.args)
  
    def get_result(self):
        try:
            return self.result
        except Exception:
            return None
  
def loop(num):
    sum = 0
    for i in range(1,num+1):
        sum = sum + i
    return sum
 
def main():
    print('Start:', ctime())
    threads = []
    nloops = range(len(loops))
    for i in nloops:
        t = MyThread(loop, (int(loops[i]),), loop.__name__)
        threads.append(t)
    for i in nloops:   # start threads 此处并不会执行线程,而是将任务分发到每个线程,同步线程。等同步完成后再开始执行start方法
        threads[i].start()
    for i in nloops:   # jion()方法等待线程完成
        threads[i].join()
    for i in nloops:   # jion()方法等待线程完成
        print(threads[i].get_result())
    print('Done:', ctime())
  
 
if __name__ == '__main__':
    main()

Python 多进程代码

import multiprocessing
import time
 
def loop(num):
    sum = 0
    for i in range(1,num+1):
        sum = sum + i
    return sum
 
if __name__ == '__main__':
    print('Start:', ctime())
    pool = multiprocessing.Pool(multiprocessing.cpu_count())
    result = []
    loops = [1e6,1e7]
    for i in range(len(loops)):
        result.append(pool.apply_async(loop, (int(loops[i]), )))
    pool.close()
    pool.join()
    for res in result:
        print(res.get())
    print('Done:', ctime())

Python 线程池和进程池

from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
import time
  
loops = [1e6,1e7]
  
def loop(num,num1):
    sum = 0
    for i in range(1,num+1):
        sum = sum + i
    return sum
 
def main():
    print('Start:', ctime())
    tasks = []
    nloops = range(len(loops))
    executor = ThreadPoolExecutor(max_workers=8) # ProcessPoolExecutor(8)
    for i in nloops:
        tasks.append(executor.submit(loop, int(loops[i]),5))
    for i in nloops:   # start threads 此处并不会执行线程,而是将任务分发到每个线程,同步线程。等同步完成后再开始执行start方法
        print(tasks[i].result())
    print('Done:', ctime())
  
 
if __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值