Python3中线程池和进程池的基本用法

系列文章目录



前言

学习python3中线程池的用法鱼进程池的用法

一、python3线程的基本用法

Python中使用线程有两种方式:函数或者用类来包装线程对象

1.1 函数调用方法

thread.start_new_thread ( function, args[, kwargs] )

参数说明:

function - 线程函数。
args - 传递给线程函数的参数,他必须是个tuple类型。
kwargs - 可选参数。
代码示例:

#! /usr/bin/env python3
import _thread
import datetime
import time

def print_time(currentName,sleepTime):
    while 1:
        nowTime = datetime.datetime.now()
        print(nowTime, currentName)
        time.sleep(sleepTime)

if __name__ == '__main__':
    try:
        _thread.start_new_thread(print_time, ('Thead-1',1))
        _thread.start_new_thread(print_time, ('Thread-2',2))
    except BaseException as e:
        print(e)
#阻止主线程退出
while 1:
    pass

在这里插入图片描述

1.2 类包装对象

示例:

 #!/usr/bin/env python3
import  threading
import datetime
import  time
class MyThread(threading.Thread):

    def __init__(self,name,time):
        threading.Thread.__init__(self)
        self.name = name
        self.time = time
    def run(self):
        while 1:
            nowTime = datetime.datetime.now()
            print(nowTime, self.name)
            time.sleep(self.time)


if __name__ == '__main__':
    try:
        t1 = MyThread('Thread-1', 1)  #创建线程1
        t2 = MyThread('Thread-2', 2)  #创建线程2
        t1.start()  #启动线程
        t2.start()  #启动线程
        #等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生
        t1.join()
        t2.join()
        print('退出主线程')
    except BaseException as e:
        print(e)

在这里插入图片描述

二、线程池的用法

示例:

from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
def fn(name):
    for i in range(1000):
        print(name,i)
    return  name

if __name__ == '__main__':
    #创建线程池
    with ThreadPoolExecutor(50) as pool:
        for i in range(100):
            pool.submit(fn,name="线程(%s)"%(i))
    print('over')

在这里插入图片描述

示例二:

from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
import  requests

def goUrl(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
    }
    response = requests.get(url=url,headers=headers)
    # with open(fileName,'wb') as f:
    #     f.write(response.content)
    print(response)
    return {'url': url, 'content': response.text}
def parse(res):
    result = res.result()
    print(result)
if __name__ == '__main__':
    urls = [
        'https://www.runoob.com/python3/python3-multithreading.html',
        'https://www.bilibili.com/video/BV17i4y1N77j?p=57&spm_id_from=pageDriver',
        'https://blog.csdn.net/please_fix_/article/details/105149082'
    ]
    #创建一个线程池
    with ThreadPoolExecutor(3) as pool:
        for url in urls:
            pool.submit(goUrl, url).add_done_callback(parse)

在这里插入图片描述

三.进程的用法

3.1 进程使用实例

#!/usr/bin/env python
from multiprocessing import Process
def func():
    for i in range(1,1000):
        print('子进程',i)
def run():
    p = Process(target = func)
    p.start()
    for index in range(1,1000):
        print('主进程',index)

if __name__ == '__main__':
    run()

3.2 进程池使用实例

#!/usr/bin/env python3
import time
from concurrent.futures import ProcessPoolExecutor
import datetime

def print_time(name):
    nowTime = datetime.datetime.now()
    print(nowTime, name)
    time.sleep(1)
    return nowTime

def callBack(res):
    print(res.result())
if __name__ == '__main__':
    with ProcessPoolExecutor(3) as pool:
         for i in range(0,3):
             pool.submit(print_time,'Process-%s'%i).add_done_callback(callBack)

在这里插入图片描述


参考文章

1.https://www.cnblogs.com/Xuuuuuu/p/10338504.html
2.https://www.runoob.com/python3/python3-multithreading.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值