Python

CPUCPU

  • --

Python

Python

threadstart_new_thread():

thread.start_new_thread ( function, args[, kwargs] )

:

  • function -
  • args - ,tuple
  • kwargs -

(Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import thread import time # def print_time( threadName, delay): count = 0 while count < 5: time.sleep(delay) count += 1 print "%s: %s" % ( threadName, time.ctime(time.time()) ) # try: thread.start_new_thread( print_time, ("Thread-1", 2, ) ) thread.start_new_thread( print_time, ("Thread-2", 4, ) ) except: print "Error: unable to start thread" while 1: pass

Thread-1: Thu Jan 22 15:42:17 2009
Thread-1: Thu Jan 22 15:42:19 2009
Thread-2: Thu Jan 22 15:42:19 2009
Thread-1: Thu Jan 22 15:42:21 2009
Thread-2: Thu Jan 22 15:42:23 2009
Thread-1: Thu Jan 22 15:42:23 2009
Thread-1: Thu Jan 22 15:42:25 2009
Thread-2: Thu Jan 22 15:42:27 2009
Thread-2: Thu Jan 22 15:42:31 2009
Thread-2: Thu Jan 22 15:42:35 2009

thread.exit()SystemExit exception


Pythonthreadthreadingthread

threading

  • threading.currentThread():
  • threading.enumerate(): list
  • threading.activeCount(): len(threading.enumerate())

ThreadThread:

  • run():
  • start():

  • join([time]): join() --
  • isAlive():
  • getName():
  • setName():

Threading

Threadingthreading.Thread__init__run

(Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import threading import time exitFlag = 0 class myThread (threading.Thread): #threading.Thread def __init__(self, threadID, name, counter): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.counter = counter def run(self): #run run print "Starting " + self.name print_time(self.name, self.counter, 5) print "Exiting " + self.name def print_time(threadName, delay, counter): while counter: if exitFlag: (threading.Thread).exit() time.sleep(delay) print "%s: %s" % (threadName, time.ctime(time.time())) counter -= 1 # thread1 = myThread(1, "Thread-1", 1) thread2 = myThread(2, "Thread-2", 2) # thread1.start() thread2.start() print "Exiting Main Thread"

Starting Thread-1
Starting Thread-2
Exiting Main Thread
Thread-1: Thu Mar 21 09:10:03 2013
Thread-1: Thu Mar 21 09:10:04 2013
Thread-2: Thu Mar 21 09:10:04 2013
Thread-1: Thu Mar 21 09:10:05 2013
Thread-1: Thu Mar 21 09:10:06 2013
Thread-2: Thu Mar 21 09:10:06 2013
Thread-1: Thu Mar 21 09:10:07 2013
Exiting Thread-1
Thread-2: Thu Mar 21 09:10:08 2013
Thread-2: Thu Mar 21 09:10:10 2013
Thread-2: Thu Mar 21 09:10:12 2013
Exiting Thread-2

ThreadLockRlockacquirereleaseacquirerelease

0"set"1"print"

"set""print"01

"set""print""set""print""set"

0101

(Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import threading import time class myThread (threading.Thread): def __init__(self, threadID, name, counter): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.counter = counter def run(self): print "Starting " + self.name # True # timeout # False threadLock.acquire() print_time(self.name, self.counter, 3) # threadLock.release() def print_time(threadName, delay, counter): while counter: time.sleep(delay) print "%s: %s" % (threadName, time.ctime(time.time())) counter -= 1 threadLock = threading.Lock() threads = [] # thread1 = myThread(1, "Thread-1", 1) thread2 = myThread(2, "Thread-2", 2) # thread1.start() thread2.start() # threads.append(thread1) threads.append(thread2) # for t in threads: t.join() print "Exiting Main Thread"

Queue

PythonQueueFIFO)QueueLIFOLifoQueuePriorityQueue

Queue:

  • Queue.qsize()
  • Queue.empty() True,False
  • Queue.full() True,False
  • Queue.full maxsize
  • Queue.get([block[, timeout]])timeout
  • Queue.get_nowait() Queue.get(False)
  • Queue.put(item, block=True, timeout=None) timeout
  • Queue.put_nowait(item) Queue.put(item, False)
  • Queue.task_done() Queue.task_done()
  • Queue.join()

(Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import Queue import threading import time exitFlag = 0 class myThread (threading.Thread): def __init__(self, threadID, name, q): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.q = q def run(self): print "Starting " + self.name process_data(self.name, self.q) print "Exiting " + self.name def process_data(threadName, q): while not exitFlag: queueLock.acquire() if not workQueue.empty(): data = q.get() queueLock.release() print "%s processing %s" % (threadName, data) else: queueLock.release() time.sleep(1) threadList = ["Thread-1", "Thread-2", "Thread-3"] nameList = ["One", "Two", "Three", "Four", "Five"] queueLock = threading.Lock() workQueue = Queue.Queue(10) threads = [] threadID = 1 # for tName in threadList: thread = myThread(threadID, tName, workQueue) thread.start() threads.append(thread) threadID += 1 # queueLock.acquire() for word in nameList: workQueue.put(word) queueLock.release() # while not workQueue.empty(): pass # exitFlag = 1 # for t in threads: t.join() print "Exiting Main Thread"

Starting Thread-1
Starting Thread-2
Starting Thread-3
Thread-1 processing One
Thread-2 processing Two
Thread-3 processing Three
Thread-1 processing Four
Thread-2 processing Five
Exiting Thread-3
Exiting Thread-1
Exiting Thread-2
Exiting Main Thread