来一发Python线程编程―同队伍列
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!我们常常会接纳临盆者/消耗者干系的两个线程来处置一个同享缓冲区的数据。比方一个临盆者线程承受用户数据放进一个同享缓冲区里,守候一个消耗者线程对数据掏出处置。可是假如缓冲区的太小而临盆者和消耗者两个异步线程的速率分歧时,简单呈现一个线程守候另外一个情形。为了尽量的延长同享资本并以不异速率事情的各线程的守候工夫,我们可使用一个“行列”来供应分外的缓冲区。创立一个“行列”工具
importQueuemyqueue=Queue.Queue(maxsize=10)
Queue.Queue类便是一个行列的同步完成。行列长度可为无穷大概无限。可经由过程Queue的机关函数的可选参数maxsize来设定行列长度。假如maxsize小于1就暗示行列长度无穷。
将一个值放进行列中
myqueue.put(10)
挪用行列工具的put()***在队尾拔出一个项目。put()有两个参数,第一个item为必须的,为拔出项目标值;第二个block为可选参数,默许为1。假如行列以后为空且block为1,put()***就使挪用线程停息,直到空出一个数据单位。假如block为0,put***将激发Full非常。
将一个值从行列中掏出
myqueue.get()
挪用行列工具的get()***从队头删除并前往一个项目。可选参数为block,默许为1。假如行列为空且block为1,get()就使挪用线程停息,直至有项目可用。假如block为0,行列将激发Empty非常。
我们用一个例子来展现怎样利用Queue
#!/usr/bin/envpythonimportQueueimportthreadingimporturllib2importtimehosts=["http://yahoo.com","http://谷歌.com.hk","http://amazon.com","http://ibm.com","http://apple.com"]queue=Queue.Queue()classThreadUrl(threading.Thread):"""ThreadedUrlGrab"""def__init__(self,queue):threading.Thread.__init__(self)self.queue=queuedefrun(self):whileTrue:#grabshostfromqueuehost=self.queue.get()#grabsurlsofhostsandprintsfirst1024bytesofpageurl=urllib2.urlopen(host)printurl.read(1024)#signalstoqueuejobisdoneself.queue.task_done()start=time.time()defmain():#spawnapoolofthreads,andpassthemqueueinstanceforiinrange(5):t=ThreadUrl(queue)t.setDaemon(True)t.start()#populatequeuewithdataforhostinhosts:queue.put(host)#waitonthequeueuntileverythinghasbeenprocessedqueue.join()main()print"ElapsedTime:%s"%(time.time()-start)
在Python中利用线程时,这个形式是一种很罕见的而且保举利用的体例。详细事情步调形貌以下:
[*]创立一个Queue.Queue()的实例,然后利用数据对它举行添补。
[*]将经由添补数据的实例传送给线程类,后者是经由过程承继threading.Thread的体例创立的。
[*]天生保卫线程池。
[*]每次从行列中掏出一个项目,并利用该线程中的数据和run***以实行响应的事情。
[*]在完成这项事情以后,利用queue.task_done()函数向义务已完成的行列发送一个旌旗灯号。
[*]对行列实行join操纵,实践上意味着比及行列为空,再加入主步伐。
在利用这个形式时必要注重一点:经由过程将保卫线程设置为true,将同意主线程大概步伐仅在保卫线程处于举动形态时才干够加入。这类体例创立了一种复杂的体例以把持步伐流程,由于在加入之前,您能够对行列实行join操纵、大概比及行列为空。
join()
坚持堵塞形态,直各处理了行列中的一切项目为止。在将一个项目增加到该行列时,未完成的义务的总数就会增添。当利用者线程挪用task_done()以暗示检索了该项目、并完成了一切的事情时,那末未完成的义务的总数就会削减。当未完成的义务的总数削减到零时,join()就会停止堵塞形态。
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!
来一发Python线程编程―同队伍列
尽量不要提问纯属是扯蛋.学习Linux特别是自己一个人初学入手的时候没人教很困难.当然如果可以的话平时多去买些Linux书...对学习Linux很有帮助. 把这个问题放在其他Linux社区请求帮助也是一种选择。如果Linux得不到答案,请不要以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。这时换一个社区是不错的选择。 查阅经典工具书和Howto,特别是Howto是全球数以万计的Linux、Unix的经验总结非常有参考价值通常40%的问题同样可以解决。 一定要养成在命令行下工作的习惯,要知道X-window只是运行在命令行模式下的一个应用程序。在命令行下学习虽然一开始进度较慢。 选择一些适于初学者的Linux社区。 Linux?最大的优点在于其作为服务器的强大功能,同时支持多种应用程序及开发工具,所以Linux操作系统有着广泛的应用空间。 硬盘安装及光盘安装,清楚了解安装Linux应注意的有关问题,如安装Linux应在最后一个分区内,至少分二个分区。
页:
[1]