多线程编程(python语言)

     众所周知,多线程编程是一种可以提高整个任务性能的并行处理方式。多线程编程的主要特点有以下几个方面,本质上是异步的;需要多个并发活动;每个活动的处理顺序可能是不确定的,或者说是随机的、不可预测的。这种编程任务可以被组织或划分成多个执行流,其中每个执行流都有一个指定要完成的任务。根据应用的不同,这些子任务可能需要计算出中间结果,然后合并为最终的输出结果。在学习多线程的一个主要的误区就是,不要认为多线程就是计算机同时运行多个线程,实际上在程序运行的任意时间,只有一个线程会被解释器运行。

          Python 提供了多个模块来支持多线程编程,包括 thread、threading 和 Queue 模块等。程序是可以使用 thread 和 threading 模块来创建与管理线程。thread模块提供了基本的线程和锁定支持;而threading模块提供了更高级别、功能更全面的线程管理。使用 Queue 模块,用户可以创建一个队列数据结构,用于在多线程之间进行共享。(PS:避免使用thread模块,应尽量使用更高级别的线程管理模块,如threading模块。不使用thread模块的一个主要原因是它对于子进程何时退出没有控制,一旦主进程结束,其它进程均强制退出。)在这里要引入一个新的概念,守护进程,如果一个进程被设置为守护进程,就表示这个进程不太重要,当主进程退出时不需要等待该进程执行完成。下面来举几个多线程的例子。

         

import threading
from time import ctime,sleep

class MyThread(threading.Thread):
	def __init__(self,func,args,name=''):
		threading.Thread.__init__(self)
		self.name=name
		self.func=func
		self.args=args

	def getResult(self):
		return self.res

	def run(self):
		print 'starting',self.name,'at:',ctime()
		self.res=self.func(*self.args)
		print self.name,'finished at:',ctime()

该程序将多线程封装成MyThread类,以后使用时可直接调用。

from random import randint
from time import sleep
from Queue import Queue
from myThread import MyThread

def writeQ(queue):
	print 'producing object for Q...',queue.put('xxx',1)
	print "size now",queue.qsize()

def readQ(queue):
	val=queue.get(1)
	print 'CONSUMED object from Q... size now',queue.qsize()

def writer(queue,loops):
	for i in range(loops):
		writeQ(queue)
		sleep(randint(1,3))

def reader(queue,loops):
	for i in range(loops):
		readQ(queue)
		sleep(randint(2,5))

funcs=[writer,reader]
nfuncs=range(len(funcs))

def main():
	nloops=randint(2,5)
	q=Queue(32)

	threads=[]
	for i in nfuncs:
		t=MyThread(funcs[i],(q,nloops),funcs[i].__name__)
		threads.append(t)

	for i in nfuncs:
		threads[i].start()

	for i in nfuncs:
		threads[i].join()

	print 'all done'

if __name__=='__main__':
	main()

该例子调用MyThread实例,完成简单的函数调用。

我觉得里边的函数什么都不用记,如果以后要用到多线程的话,将这个框架做相应的修改就行了。

本人对计算机视觉比较感兴趣,有兴趣的大神可以多多交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值