美文网首页python
python 多线程操作

python 多线程操作

作者: sunshaoping | 来源:发表于2018-08-23 20:25 被阅读4次

1.Python标准库自带了两个多线程模块,分别是threading和thread,其中,thread是低级模块,threading是对thread的封装,一般,我们直接使用threading即可。下面来看一个简单的多线程例子:

# 利用threading模块使用多线程
def say_hello():  # 定义线程执行的函数
    print("Hello world!")

def run():
    start_time = time.time()  
    for i in range(10):
        thread = threading.Thread(target=say_hello)  # 定义线程执行函数
        thread.start()  # 启动线程
    end_time = time.time()
    times = end_time - start_time  # 计算线程执行时间
    print(times)

if __name__ == '__main__':
    run()

在这个例子中,我们首先定义了多线程执行的函数say_hello,然后我们在主函数中创建了10个线程,并告诉线程要执行的函数,然后我们调用start()方法启动这些线程
2.给线程传参数
通过定义并调用线程类,实现给线程传入参数功能

import threading

# 创建线程类
class sayHelloThread(threading.Thread):
    # 指定线程需要的参数name
    def __init__(self,name):
        threading.Thread.__init__(self)
        self.name = name

    # 指定线程运行函数
    def run(self):
        print("%s say hello" %self.name) 
def main():
    # 创建线程
    thread_1 = sayHelloThread("Tom")
    # 启动线程
    thread_1.start()
    # 结束线程
    thread_1.join()

if __name__ == '__main__':
    main()

3.使用线程池
通过利用python内置的线程池,将将要执行的任务存放到线程池中,利用线程池来执行任务

# 线程池创建

import threadpool, time

# 创建任务
def say(name):
    print("%s say hello" % name)


def main():
    # 创建线程池,定义线程数为4
    pool = threadpool.ThreadPool(5)
    # 指定任务列表,里面一个元素代表着一个任务需要的参数
    tast_param_list = ["Tom", "Tim", "Roes", "Jim", "Jok"]
    # 创建任务列表
    task_list = threadpool.makeRequests(say, tast_param_list)
    start_time = int(time.time() * 1000)
    # 任务在线程池中执行
    [pool.putRequest(x) for x in task_list]
    # 等待任务执行完成
    pool.wait()
    end_time = int(time.time() * 1000)
    print("线程执行完毕,总共耗时%s" % ((end_time - start_time) / 1000))


if __name__ == '__main__':
    main()

4.产生线程队列

# 线程安全队列

import threading
# 线程队列
from queue import Queue
import time

# 创建线程安全的队列
queue = Queue(4)


# 创建生产线程类
class producerThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        index = 1
        while True:
            index += 1
            item = "item" + str(index)
            # 生产的item存放在队列
            queue.put(item)
            print("%s 生产:%s" % (threading.current_thread().getName(), item))
            time.sleep(1)


# 创建消费线程类
class customerThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        while True:
            # 从队列中获取数据
            item = queue.get()
            print("%s 消费:%s" % (threading.current_thread().getName(), item))


def main():
    # 创建生产者线程
    producer = producerThread()
    # 创建消费者线程
    customer = customerThread()
    # 启动生产者线程
    producer.start()
    # 启动消费者进程
    customer.start()


if __name__ == '__main__':
    main()

相关文章

  • Python多线程

    Python内置库:threading(多线程操作) Python的线程操作在旧版本中使用的是thread模块,在...

  • python多线程 from multiprocessing.d

    python多线程 from multiprocessing.dummy import Poolpython操作e...

  • 索引 - Python

    文集主页 Python 解释器和三种栈多进程、多线程、协程、并发并行Python I/O 操作(一)Python ...

  • python------多线程和单线程

    一、创建多线程 Python提供两个模块进行多线程的操作,分别是thread和threading,前者是比较低级的...

  • python进程

    一、创建多线程 Python提供两个模块进行多线程的操作,分别是thread和threading,前者是比较低级的...

  • python高级线程、进程和进程池

    一、创建多线程 Python提供两个模块进行多线程的操作,分别是thread和threading,前者是比较低级的...

  • python 多线程操作

    1.Python标准库自带了两个多线程模块,分别是threading和thread,其中,thread是低级模块,...

  • python | pymysql模块

    1、基本增删改查操作2、python调用存储过程3、多线程实现mysql存取操作 一、基础操作 每次都连接关闭很麻...

  • 理解 python 中多线程

    虽然python中由于GIL的机制致使多线程不能利用机器多核的特性,但是多线程对于我们理解并发模型以及底层操作非常...

  • Python 多线程操作学习

    Python 多线程操作 什么是线程: 线程(Thread)也叫轻量级进程,是操作系统能够进行运算调度的最小单位,...

网友评论

    本文标题:python 多线程操作

    本文链接:https://www.haomeiwen.com/subject/nommiftx.html