# -*- coding: UTF-8 -*- import thread import time # start_new_thread(function,args, kwargs=None) 生成一个新的线程 # allocate_lock() 分片locktype锁对象 # exit() 给线程退出指令 # acquire(wait=None) 尝试获取锁的对象 # locked() 如果获取了锁对象则返回True, 否则,返回False # release() 释放锁 def loop0(): print "start loop 0 at:", time.ctime() time.sleep(4) print "loop 0 done at:", time.ctime() def loop1(): print 'start loop 1 at', time.ctime() time.sleep(2) print "loop 1 done at:", time.ctime() def main(): print "starting at: ", time.ctime() # loop0() # loop1() thread.start_new(loop0, ()) thread.start_new(loop1, ()) time.sleep(6) print "all Done at: ", time.ctime() #不加线程时,需要6-7s,通过线程后,脚本运行只需要4s if __name__ == '__main__': main()

python入门多线程(python之线程)(1)

# -*- coding: UTF-8 -*- # -*- coding: UTF-8 -*- import thread import time # 使用线程和锁。 # 通过使用锁,可以在所有线程全部完成执行后立即退出。 # start_new_thread(function,args, kwargs=None) 生成一个新的线程,使用给定的args和可选的kwargs来执行function # allocate_lock() 分配locktype锁对象 # exit() 给线程退出指令 # acquire(wait=None) 尝试获取锁的对象 # locked() 如果获取了锁对象则返回True, 否则,返回False # release() 释放锁 loops = [4, 2] def loop(nloop, nsec, lock): print "start loop 0 at:", time.ctime() time.sleep(nsec) print "loop", nloop, 'done at:', time.ctime() lock.release() def main(): print 'starting at:', time.ctime() locks = [] nloops = range(len(loops)) for i in nloops: #分配锁,获取锁对象 lock = thread.allocate_lock() #取得每一个锁,相当于将“把锁锁上”,锁上之后,将锁添加到锁列表locks中 lock.acquire() locks.append(lock) for i in nloops: #调用函数loop(),并传递3个参数: # i, 对应loop(nloop, nsec, lock):的nloop # loops[i], 对应loop(nloop, nsec, lock):的nsec # locks[i]:锁对象,对应函数lock参数 thread.start_new(loop, (i, loops[i], locks[i])) for i in nloops: while locks[i].locked(): pass print 'all Done at:', time.ctime() if __name__ == '__main__': main() #输出 # starting at: Thu May 12 23:37:28 2022 # start loop 0 at: start loop 0 at:Thu May 12 23:37:28 2022 # Thu May 12 23:37:28 2022 # loop 1 done at: Thu May 12 23:37:30 2022 # loop 0 done at: Thu May 12 23:37:32 2022 # all Done at: Thu May 12 23:37:32 2022

# -*- coding: UTF-8 -*- import threading import time # threadming模块 # thread,表示执行一个线程的对象 # lock,锁对象,和thread模块中的锁一样 # Rlock,可重入锁对象,使单一线程可以再次获得已持有的锁(递归锁) # Condition,条件变量对象,使得一个线程等等另一个线程满足特定的条件,比如改变状态或者某一个值 # Even,条件变量的通用版本,任意数量的线程等待某一个事件的发生,在该事件发生后所有线程将被激活 # Semaphore: 为线程间共享的有限资源提供一个计数器,如果没有可用资源时会被阻塞 # BoundSemaphore: 与Semaphore相似,不过他不允许超过初始值 # Timer: 与Thread相似,不过它要在运行前等待一段时间 # Barrier: 创建一个障碍,必须达到指定数量的线程后才可以继续 # thread模块:不支持守护线程,当主线程结束后,所有子线程都终止。 # threading.Thread对象属性 # name, 线程名 # ident: 线程标识符 # daemon: 布尔标志,表示这个线程是否是守护线程 # threading.Thread对象方法 # __init__(group=None, target=None, name=None, args=(), kwargs={}, verbase=None, daemon=None) # 实例化一个线程对象,需要一个可调用的target,以及其参数args或kwargs,还可以传递name或group参数。 # 此外verbose 标志也可以接受 # daemon的值将会设定为thread.daemon属性/标志 # start(),开始执行线程 # run(),定义线程功能,通常在子类中被应用重写 # join(timeout=None),直到启动的线程终止之前一直挂起,除非给出了timeout(秒),否则会一直阻塞 # getName(),返回线程名 # setName(),设定线程名 # isAlive/is_alive(),布尔标志,表示这个线程是否存活 # isDaemon(),如果是守护线程,则返回True,否则返回False # setDaemon(daemon),把线程的守护标志设定为布尔值 daemonic(必须在线程 start()之前调用) loops = [4, 2] def loop(nloop, nsec): print 'start loop', nloop, 'at:', time.ctime() time.sleep(nsec) print 'loop', nloop, 'done at:', time.ctime() def main(): print 'starting at:', time.ctime() threads = [] nloops = range(len(loops)) for i in nloops: t = threading.Thread(target=loop, args=(i, loops[i])) threads.append(t) for i in nloops: threads[i].start() for i in nloops: threads[i].join() print 'all done at:', time.ctime() if __name__ == "__main__": main() #输出结果 # starting at: Fri May 13 00:22:22 2022 # start loop 0 at: Fri May 13 00:22:22 2022 # start loop 1 at: Fri May 13 00:22:22 2022 # loop 1 done at: Fri May 13 00:22:24 2022 # loop 0 done at: Fri May 13 00:22:26 2022 # all done at: Fri May 13 00:22:26 2022

,