iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python多线程threading
  • 245
分享到

python多线程threading

多线程pythonthreading 2023-01-31 07:01:23 245人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

本文通过 4个example 介绍python中多线程package —— threading的常用用法, 包括调用多线程, 同步队列类Queue, Ctrl+c结束多线程。 example1. 调用10个线程, 分别打印0~

本文通过 4个example 介绍python多线程package —— threading的常用用法, 包括调用多线程, 同步队列类Queue, Ctrl+c结束多线程。


example1.

调用10个线程, 分别打印0~4, 每打印一个数pause一秒钟。

code如下所示, 在test()函数中用threading.Thread建立10个线程;
一种方法是不要将这些线程设置为守护线程,如code所示;
一种方法是设置守护线程( setDeamon(True)),并用join()让程序等所有线程结束了再退出(即去掉code中的注释);


#
#

import time
import threading

def printf(i):
    for x in xrange(5):
        time.sleep(1)
        print i,

def test():
    thread_list = []
    for i in xrange(10):
        sthread = threading.Thread(target = printf, args = str(i))
#        sthread.setDaemon(True)
        sthread.start()
        thread_list.append(sthread)
#    for i in xrange(10):
#        thread_list[i].join()


if __name__ == '__main__':
    test()

结果:

$Python b.py
0 1 2 3 4 5 6 7 8 9 2 1 0 4 5 6 7 3 8 9 1 2 0 5 6 7 4 3 8 9 2 1 0 6 7 4 3 5 8 9 1 0 2 7 4 635 8 9




example2.

调用10个守护线程(每个守护线程的timeout时间为1s), 分别打印0~4, 每打印一个数pause x秒钟, x为0~4之间的randint值。



#
#-
#-
#-
#
#

import time
import threading
import random

def printf(i):
    randtime = random.randint(1,5)
    for x in xrange(5):
        time.sleep(randtime)
        print "T" + str(i), randtime # print T<threadid> randtime

def test():
    thread_list = []
    for i in xrange(10):
        sthread = threading.Thread(target = printf, args = str(i))
        sthread.setDaemon(True)
        sthread.start()
        thread_list.append(sthread)
    for i in xrange(10):
        thread_list[i].join(1)


if __name__ == '__main__':
    test()

结果:


这里写图片描述

从图中可见,在运行的这10s中, pause x秒的thread被打印了[10/x]次。




example3.

引入Queue, 带同步功能(enqueue和dequeue不用手动加)的queue类。

在下面的code中,proc函数处理一个thread的操作:
1. dequeue 一个队头元素
2. enqueue 5个threadid
3. 重复执行两次步骤2(epoch<2)

这里注意proc函数中的最后Q.task_done()表示一个任务(一个dequeue的元素)已经结束;test( )中最后的Q.join()为等待队列为空才退出程序。


#
#-
#-
#-
#
#

import time
import threading
import random
import Queue

Q = Queue.Queue()

def proc(threadid, epoch):
    while True:
        time.sleep(1)
        try:
            ele = Q.get()
            print 'Thread ' + str(threadid) + ' get element ' + str(ele)
        except Queue.Empty:
            print 'Thread ' + str(threadid) + ' get empty queue'
            continue
        if int(epoch) < 2:
            for i in xrange(5):
                Q.put(threadid)
            epoch = int(epoch) + 1

        Q.task_done()


def test():
    Q.put(1)
    thread_list = []
    for i in xrange(3):
        args = [str(i), str(0)]
        sthread = threading.Thread(target = proc, args = args)
        sthread.setDaemon(True)
        sthread.start()
        thread_list.append(sthread)
    Q.join()


if __name__ == '__main__':
    test()

结果:

PS:最开始get到的1是在test()中put进去的;


这里写图片描述




example4.

程序接收ctrl + c后退出。程序每个thread打印100次threadid,直到ctrl+c退出。

PS: 更好的设计是在try,except后加finally块, 做到即便不ctrl+c也可以正常退出,就留给大家下面练习吧~

#
#-
#-
#-
#
#

import time
import threading

def printf(i):
    for x in xrange(100):
        time.sleep(1)
        print i,

def test():
    for i in xrange(10):
        sthread = threading.Thread(target = printf, args = str(i))
        sthread.setDaemon(True)
        sthread.start()
    try:
        while 1:
            time.sleep(1)
    except KeyboardInterrupt:
        print 'exit'



if __name__ == '__main__':
    test()

运行结果:


这里写图片描述

--结束END--

本文标题: python多线程threading

本文链接: https://www.lsjlt.com/news/191319.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python多线程threading
    本文通过 4个example 介绍python中多线程package —— threading的常用用法, 包括调用多线程, 同步队列类Queue, Ctrl+c结束多线程。 example1. 调用10个线程, 分别打印0~...
    99+
    2023-01-31
    多线程 python threading
  • python threading多线程p
    #!/usr/bin/env python                                                                                       #_*_coding:u...
    99+
    2023-01-31
    多线程 python threading
  • Python 多线程threading模
            首先,我们在了解多线程时需要理解的就是什么是多线程,按照官方的解释就是:多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。    在我自学到这里的时候,通过会在想进程和线程到底是有...
    99+
    2023-01-31
    多线程 Python threading
  • Python多线程threading用法
    Python里面经常会用到多线程,即所有的方法在同一时间开始运行,而不是按顺序一个一 个运行。所用到的模块为threading,下面详解threading用法。 我们写三个方法,one、two、three并正常运行。 这里只截图了one()...
    99+
    2023-01-31
    多线程 Python threading
  • python 包之 threading 多线程
    目录一、创建一个线程二、创建多个线程三、线程同步四、递归锁五、信号锁一、创建一个线程 通过实例化threading.Thread类创建线程 import threading def...
    99+
    2024-04-02
  • Python 多线程之 threading 模块
    在之前的文章中,我们已经介绍了 Python 通过 _thread 和 threading 模块提供了对多线程的支持,threading 模块兼具了 _thread 模块的现有功能,又扩展了一些新的功能,具有十分丰富的线程操作功能,本节我们...
    99+
    2023-09-16
    python 开发语言 java
  • python 多线程threading程序详情
    CPython implementation detail: 在 CPython 中,由于存在全局解释器锁, 同一时刻只有一个线程可以执行 Python 代码(虽...
    99+
    2024-04-02
  • python 通过threading多线
    #!/usr/bin/env python#coding=utf-8import paramikoimport time,datetime,threadingdef ssh(ip,user,passwd,command):    ssh =...
    99+
    2023-01-31
    python threading 多线
  • Python线程之threading
    线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。进程是资源分配的最小单位,线程是CPU调度的最小单位,每一个进程中至少有一个线程,线程可与属于同一进程的其它线...
    99+
    2023-01-31
    线程 Python threading
  • Python线程threading(Thread类)
    目录前言Python创建线程 threading调用Thread类的构造器创建线程继承Thread类创建线程类Thread join()用法前言 几乎所有的操作系统都支持同时运行多个...
    99+
    2024-04-02
  • Python多线程编程之threading模块详解
    目录一、介绍二、Python如何创建线程2.1 方法一:2.2 方法二:三、线程的用法3.1 确定当前的线程3.2 守护线程3.3 控制资源访问一、介绍 线程是什么?线程有啥用?线程...
    99+
    2024-04-02
  • python threading超线程使
    在工作过程中中,将内容过程中经常用的内容片段珍藏起来,下面内容段是关于python threading超线程使用简单范例的内容,希望能对小伙伴们有较大帮助。 # encoding: UTF-8 import threading # 方法1...
    99+
    2023-01-31
    超线程 python threading
  • Python 多线程之threading 模块的使用
    目录简介 创建线程 构造器方式 继承方式 守护线程 线程本地数据 定时器 简介 Python 通过 _thread 和 threading 模块提供了对多线程的支持,threadi...
    99+
    2024-04-02
  • python3--threading模块(线程)
    上章节内容总结:队列    队列:先进先出,数据进程安全    管道+锁 可实现队列    生产者消费者模型:解决数据供需不平衡管道    双向通信 数据进程不...
    99+
    2023-01-30
    线程 模块 threading
  • python中threading实现线程的示例分析
    小编给大家分享一下python中threading实现线程的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!过程说明从Thread类构成子类。覆盖方法根据需...
    99+
    2023-06-20
  • [python][threading][
        thread不支持守护线程,当主线程退出时,所有的子线程无条件推出;针对这种情况,threading引入了守护线程的概念。     如果主线程要退出的时候,不用等待子线程完成,那就在线程开始之前,即调用start()之前,调用set...
    99+
    2023-01-31
    python threading
  • python中怎么实现threading线程同步
    小编给大家分享一下python中怎么实现threading线程同步,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!说明threading模块具有实现锁定的内置功能,允许同步线程。为了防止数据损坏或丢失,需要锁定来控制共享资源...
    99+
    2023-06-20
  • Python threading和Thread模块及线程的实现
    目录前言1. 线程1.1 线程模块1.1.1 Thread类1.2 创建线程1.2.1 实例Thread类法创建线程1.2.1 继承重写Thread类法创建线程1.3 Join &a...
    99+
    2024-04-02
  • 怎么在python中使用threading创建线程
    本篇文章为大家展示了怎么在python中使用threading创建线程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究...
    99+
    2023-06-14
  • Python 常用模块threading和Thread模块之线程池
    目录1. 池的概念2. 自定义线程池3. 使用Python内置线程池4. 池的其他操作1. 池的概念 主线程: 相当于生产者,只管向线程池提交任务。 并不关心线程池是如何执行任务的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作