python threading

python threading 模块使用多线程。感谢小马哥指点迷津。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import threading

threads = []
# 先创建线程对象 
for li in db_con:
    t = threading.Thread(target=update_thread,args=(list,file,db_con,li))
    threads.append(t)
# 启动所有线程
for i in (0,len(threads)):
    threads[i].start()
#阻塞主线程,直到所有线程完成或超时后执行主线程。参数说明中有解释。
for i in (0,len(threads)):
    threads[i].join()
 
def update_thread(list,file,db_con,li):
       ##  do something

参数说明:

def __init__(self, group=None, target=None, name=None, args=(), kwargs={})

  •   参数group是预留的,用于将来扩展;
  •   参数target是一个可调用对象(也称为活动[activity]),在线程启动后执行;
  •   参数name是线程的名字。默认值为“Thread-N“,N是一个数字。
  •   参数args和kwargs分别表示调用target时的参数列表和关键字参数。

Thread.join([timeout])

  • 调用Thread.join将会使主调线程堵塞,直到被调用线程运行结束或超时。参数timeout是一个数值类型,表示超时时间,如果未提供该参数,那么主调线程将一直堵塞到被调线程结束

例:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import threading, time

def doWaiting():
    print ‘start waiting:‘, time.strftime(‘%H:%M:%S‘)
    time.sleep(3)
    print ‘stop waiting‘, time.strftime(‘%H:%M:%S‘)
thread1 = threading.Thread(target = doWaiting)
thread1.start()
time.sleep(1)  #确保线程thread1已经启动

print ‘start join‘
thread1.join()	#将一直堵塞,直到thread1运行结束。
print ‘end join‘

网上找到一个经典案例。

链接地址:http://www.jb51.net/article/53918.htm

#-*- encoding: gb2312 -*-
import threading
import time
  
class Test(threading.Thread):
  def __init__(self, num):
    threading.Thread.__init__(self)
    self._run_num = num
  
  def run(self):
    global count, mutex
    threadname = threading.currentThread().getName()
  
    for x in xrange(0, int(self._run_num)):
      mutex.acquire()
      count = count + 1
      mutex.release()
      print threadname, x, count
      time.sleep(1)
  
if __name__ == ‘__main__‘:
  global count, mutex
  threads = []
  num = 4
  count = 1
  # 创建锁
  mutex = threading.Lock()
  # 创建线程对象
  for x in xrange(0, num):
    threads.append(Test(10))
  # 启动线程
  for t in threads:
    t.start()
  # 等待子线程结束
  for t in threads:
    t.join()
时间: 2024-11-05 17:27:57

python threading的相关文章

python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)

今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系,纯的python代码处理一般逻辑的确无法活动性能上的极大提升,但是在处理需要等待外部资源返回或多用户的应用程序中,多线程仍然可以作为一个比较好的工具来进行使用. python提供了两个模块thread和threading 来支持python的多线程操作.通俗的讲一般现在我们只使用threading

[Python]threading local 线程局部变量小测试

概念 有个概念叫做线程局部变量,一般我们对多线程中的全局变量都会加锁处理,这种变量是共享变量,每个线程都可以读写变量,为了保持同步我们会做枷锁处理.但是有些变量初始化以后,我们只想让他们在每个线程中一直存在,相当于一个线程内的共享变量,线程之间又是隔离的.python threading模块中就提供了这么一个类,叫做local. 多线程中共享变量和局部变量的区别我画两个小图,简单描述下(作图能力一般,请见谅,概念性的东西大家可以google下,很多好文章) 全局变量 线程局部变量 对比: 下面是

Python学习笔记- Python threading模块

Python threading模块 直接调用 # !/usr/bin/env python # -*- coding:utf-8 -*- import threading import time def sayhi(num): print("running on number:%s" % num) time.sleep(3) if __name__ =='__main__': #生成两个线程实例 t1 = threading.Thread(target=sayhi,args=(1,)

python threading queue

import queue,threading l=threading.Lock() class MyThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) global que self.queue = que def run(self): while True: if self.queue.empty(): break item = self.queue.get() if l.acquire(1

python threading超线程使用简单范例的代码

在工作过程中中,将内容过程中经常用的内容片段珍藏起来,下面内容段是关于python threading超线程使用简单范例的内容,希望能对小伙伴们有较大帮助. # encoding: UTF-8 import threading # 方法1:将要执行的方法作为参数传给Thread的构造方法 def func(): print 'func() passed to Thread' t = threading.Thread(target=func) t.start() # 方法2:从Thread继承,并

python threading实例解析diaoyo'n

1.认识GIL: 说到GIL一直是代码专家们一直以来想要解决的问题,也是被许多程序员诟病的,下面带领大家看下官方threading模块document中如何去描述对于GIL这个全局解释器锁的:https://docs.python.org/3/library/threading.html 全局解释器锁 所使用的机制的CPython解释器来确保只有一个线程执行的Python 字节码在一个时间.通过使对象模型(包括关键的内置类型,例如dict)隐式安全地防止并发访问,从而简化了CPython的实现.

python threading模块中对于信号的抓取

最近的物联网智能网关(树莓派)项目中遇到这样一个问题:要从多个底层串口读取发来的数据,并且做出相应的处理,对于每个串口的数据的读取我能想到的可以采用两种方式: 一种是采用轮询串口的方式,例如每3s向每个串口的buffer区去取一次数据,但是这样可能会有缓冲区溢出的可能,同时,数据的同步也可能会出现一定的问题,因为数据的上传周期是可以用户自定义的,一旦用户定义的上传周期过短或过长,都可能造成读取的数据出问题. 另一种方式,就是采用多线程方式,把每个串口读取数据放在单独的子线程中,每个子线程阻塞于串

python threading父进程不死,子线程不退出..如何才能使用完线程后回收线程?

最近使用python的多线程 进行并发的ping操作,其中使用in_queue和out_queue两个阻塞队列,来确保线程安全.发现一个问题, 就是,创建多线程的主进程只要不退出,它(主进程)所创建的所有线程不会被杀死,只是状态均为sleeping状态而已,这样会有一个问题,就是linux系统分配给每个用户所开进程最大数目是有限制的,如果一个进程比如flask或者django在运行后,理论上不会退出的,这样会创建出越来越多的线程,早晚会达到上限,这样系统不能分配任何资源给这个用户了.... 代码

python threading.current_thread().name和.getName()有什么区别

今天学到python多线程这块,想显示当前线程是主线程还是子线程.网上一搜,有个方法叫 1 threading.current().name 定海偶然 但是发现,同样的threading.current_thread()后面不仅仅有.name属性,而且还有.getName()方法.但是 这2个写法最后得出的结果却是一样的. 那么,2者区别在哪里呢? 1 import threading 2 import time 3 4 def run(arg): 5 print("running sub th