python多线程操作实例

一、python多线程

因为CPython的实现使用了Global Interpereter Lock(GIL),使得python中同一时刻只有一个线程在执行,从而简化了python解释器的实现,且python对象模型天然地线程安全。如果你想你的应用程序在多核的机器上使用更好的资源,建议使用multiprocessing或concurrent.futures.processpoolexecutor。但是如果你的程序是IO密集型,则使用线程仍然是很好的选择。

二、python多线程使用的两种方法

实例:

代码如下:

import threading
import time

def worker(num):
  print (threading.currentThread().getName() + ' start')
  time.sleep(10)
  print (threading.currentThread().getName() + ' running')
  print (threading.currentThread().getName() + " " + str(num))
  print (threading.currentThread().getName() + ' exit')
 
def deamon():
  print (threading.currentThread().getName() + ' start')
  time.sleep(20)
  print (threading.currentThread().getName() + ' running')
  print (threading.currentThread().getName() + ' exit')
 
print(threading.currentThread().getName())

d = threading.Thread(name='deamon', target=deamon)
d.setDaemon(True)
d.start()

w = threading.Thread(name='worker', target=worker, args=(10,))
w.start()

class myWorker(threading.Thread):
    def __init__(self, num): 
        threading.Thread.__init__(self) 
        self.num = num 
        self.thread_stop = False 
  
    def run(self):
        print (self.getName()+' start')
        time.sleep(30)
        print (self.getName()+' running')
        print (self.getName()+" " + str(self.num))
        print (self.getName()+' exit')
 
mw = myWorker(30)
mw.setName("MyWorker")
mw.start()

print(threading.currentThread().getName())

print("All threads:")
print("------------")
for th in threading.enumerate():
  print(th.getName())
print("------------")

d.join()
w.join()
mw.join()

print(threading.currentThread().getName())

运行结果如下:

1)python线程使用的两种方法:

**直接调用threading.Thread来构造thread对象,Thread的参数如下:
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}) 
group为None;
target为线程将要执行的功能函数;
name为线程的名字,也可以在对象构造后调用setName()来设定;
args为tuple类型的参数,可以为多个,如果只有一个也的使用tuple的形式传入,例如(1,);
kwargs为dict类型的参数,也即位命名参数;

**实现自己的threading.Thread的子类,需要重载__init__()和run()。

2)threading.Thread对象的其他方法:

start(),用来启动线程;
join(), 等待直到线程结束;
setDeamon(), 设置线程为deamon线程,必须在start()调用前调用,默认为非demon。
注意: python的主线程在没有非deamon线程存在时就会退出。

3)threading的静态方法:

threading.current_thread() , 用来获得当前的线程;
threading.enumerate() , 用来多的当前存活的所有线程;
threading.Timer 定时器,其实是thread的一个字类型,使用如下:

代码如下:

def hello(): print("hello, world")  
t = Timer(30.0, hello)
t.start()

4)logging是线程安全的

logging 模块是线程安全的,所以可以使用logging来帮助调试多线程程序。

代码如下:

import logging
logging.basicConfig(level=logging.DEBUG,
format="(%(threadName)-10s : %(message)s",
)
logging.debug("wait_for_event_timeout starting")

(0)

相关推荐

  • 在Python中操作列表之List.append()方法的使用

    append()方法追加传递obj到现有的列表. 语法 以下是append()方法的语法: list.append(obj) 参数 obj -- 这是在列表中要追加的对象. 返回值 此方法不返回任何值,但更新现有的列表. 例子 下面的例子显示了append()方法的使用. #!/usr/bin/python aList = [123, 'xyz', 'zara', 'abc']; aList.append( 2014 ); print "Updated List : ", aList;

  • python装饰器decorator介绍

    一.装饰器decorator decorator设计模式允许动态地对现有的对象或函数包装以至于修改现有的职责和行为,简单地讲用来动态地扩展现有的功能.其实也就是其他语言中的AOP的概念,将对象或函数的真正功能也其他辅助的功能的分离. 二.Python中的decorator python中的decorator通常为输入一个函数,经过装饰后返回另一个函数.  比较常用的功能一般使用decorator来实现,例如python自带的staticmethod和classmethod. 装饰器有两种形式:

  • python中global与nonlocal比较

    python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量 一.global global关键字用来在函数或其他局部作用域中使用全局变量.但是如果不修改全局变量也可以不使用global关键字. 复制代码 代码如下: gcount = 0 def global_test():     print (gcount)     def global_counter():     global gcount     gcount +=1   

  • python多线程操作实例

    一.python多线程 因为CPython的实现使用了Global Interpereter Lock(GIL),使得python中同一时刻只有一个线程在执行,从而简化了python解释器的实现,且python对象模型天然地线程安全.如果你想你的应用程序在多核的机器上使用更好的资源,建议使用multiprocessing或concurrent.futures.processpoolexecutor.但是如果你的程序是IO密集型,则使用线程仍然是很好的选择. 二.python多线程使用的两种方法

  • Python多线程操作之互斥锁、递归锁、信号量、事件实例详解

    本文实例讲述了Python多线程操作之互斥锁.递归锁.信号量.事件.分享给大家供大家参考,具体如下: 互斥锁: 为什么要有互斥锁:由于多线程是并行的,如果某一线程取出了某一个数据将要进行操作,但它还没有那么快执行完操作,这时候如果另外一个线程也要操作这个数据,那么这个数据可能会因为两次操作而发生错误 import time,threading x=6 def run1(): print("run1我拿到了数据:",x) print("我现在还不想操作,先睡一下")

  • Python 多线程的实例详解

     Python 多线程的实例详解 一)线程基础 1.创建线程: thread模块提供了start_new_thread函数,用以创建线程.start_new_thread函数成功创建后还可以对其进行操作. 其函数原型: start_new_thread(function,atgs[,kwargs]) 其参数含义如下: function: 在线程中执行的函数名     args:元组形式的参数列表.     kwargs: 可选参数,以字典的形式指定参数 方法一:通过使用thread模块中的函数创

  • python字典操作实例详解

    本文实例为大家分享了python字典操作实例的具体代码,供大家参考,具体内容如下 #!/usr/bin/env python3 # -*- coding: utf-8 -*- import turtle ##全局变量## #词频排列显示个数 count = 10 #单词频率数组-作为y轴数据 data = [] #单词数组-作为x轴数据 words = [] #y轴显示放大倍数-可以根据词频数量进行调节 yScale = 6 #x轴显示放大倍数-可以根据count数量进行调节 xScale =

  • python多线程同步实例教程

    前言 进程之间通信与线程同步是一个历久弥新的话题,对编程稍有了解应该都知道,但是细说又说不清.一方面除了工作中可能用的比较少,另一方面就是这些概念牵涉到的东西比较多,而且相对较深.网络编程,服务端编程,并发应用等都会涉及到.其开发和调试过程都不直观.由于同步通信机制的原理都是想通的,本文希通过望借助python实例来将抽象概念具体化. 阅读之前可以参考之前的一篇文章:python多线程与多进程及其区别,了解一下线程和进程的创建. python多线程同步 python中提供两个标准库thread和

  • python多线程用法实例详解

    本文实例分析了python多线程用法.分享给大家供大家参考.具体如下: 今天在学习尝试学习python多线程的时候,突然发现自己一直对super的用法不是很清楚,所以先总结一些遇到的问题.当我尝试编写下面的代码的时候: 复制代码 代码如下: class A():     def __init__( self ):         print "A" class B( A ):     def __init__( self ):         super( B, self ).__in

  • python元组操作实例解析

    本文实例讲述了python元组操作方法,分享给大家供大家参考.具体分析如下: 一般来说,python的函数用法挺灵活的,和c.php的用法不太一样,和js倒是挺像的. 在照着操作时,可以发现一个很神奇的现象: >>> t = (1, 3, 'b') >>> q = t + ((3, 'abc')) >>> q (1, 3, 'b', 3, 'abc') 这里我预料的应该是(1, 3, 'b', (3, 'abc')),但是结果却是(1, 3, 'b',

  • Python元组操作实例分析【创建、赋值、更新、删除等】

    本文实例讲述了Python元组操作.分享给大家供大家参考,具体如下: #coding=utf8 ''''' 元组是跟列表非常相近的另一种容器类型. 元组是一种不可变类型,一旦创建不可以修改其中元素. 由于这种特性,元组能做一个字典的key. 当处理一组对象时,这个组默认是元组类型. ''' '''''创建元组并赋值''' #创建并对一个元组赋值 tuple_1=(1,2,3,"ewang","demo") #创建一个空的元组 tuple_2=() #使用tuple创

  • python列表操作实例

    本文实例讲述了python列表操作的方法.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: class Node:    """Single node in a data structure"""      def __init__(self, data):       """Node constructor"""              self._data = da

  • PHP使用Pthread实现的多线程操作实例

    本文实例讲述了PHP使用Pthread实现的多线程操作.分享给大家供大家参考,具体如下: <?php class vote extends Thread { public $res = ''; public $url = array(); public $name = ''; public $runing = false; public $lc = false; public function __construct($name) { $this->res = '暂无,第一次运行.'; $th

随机推荐