python(6),,多线程开发1、thr


多线程开发

1、threading.Thread模块

·start

·getName():获取名称

·setName():设置名称

·isDaemon()

·setDaemon()

·join(timeout):进程等线程的时候,比如timeout等于5就是执行到线程的时候进程等线程5秒钟,如果线程执行超过5秒就不等待,继续执行进程

·run()

2、多线程开发创建线程

代码:fromthreadingimportThreaddefFoo(arg):printargt1=Thread(target=Foo,args=(1,))t1.start()结果:1

3、生产者-消费者模型 (关于概念在上篇博客已经写出)

代码1#!/usr/bin/envpython#-*-coding:utf-8-*-importthreadingimporttimeimportrandomimportQueue#队列模块defProducer(name,que):#生产者whileTrue:que.put(‘包子‘)#相当于把包子放到仓库里print‘%s:做了一个包子‘%name#打印出做了一个包子出来time.sleep(random.randrange(5))#厨师5秒内做出一个包子defConsumer(name,que):#消费者whileTrue:try:#异常处理,如果碰到没有包子可吃就等待厨师做包子que.get_nowait()print‘%s:吃了一个包子‘%nameexceptException:printu‘没有包子了‘time.sleep(random.randrange(3))#消费者3秒内吃掉一个包子q=Queue.Queue()#队列p1=threading.Thread(target=Producer,args=[‘厨师1‘,q])#目标是Producer这个函数,args是传参p2=threading.Thread(target=Producer,args=[‘厨师2‘,q])p1.start()p2.start()c1=threading.Thread(target=Consumer,args=[‘张三‘,q])c2=threading.Thread(target=Consumer,args=[‘李四‘,q])c1.start()c2.start()

4、线程进程

(1)区别:

·一个进程产生多个线程

·线程是共享内存的,进程是独立的

·线程多数是为进程服务的不能单独运行

5、线程锁

lock对象是python中提供的低级线程控制工具

lock.acquire()得到一个锁

lock.release()释放一个锁

#!/usr/bin/envpython#coding:utf-8importthreadingimporttimegl_num=0lock=threading.Lock()defFunc():lock.acquire()globalgl_numgl_num+=1time.sleep(1)printgl_numlock.release()foriinrange(10):t=threading.Thread(target=Func)t.start()

5.线程间通信threading.event

Python提供了Event对象用于线程间通信,它是由线程设置的信号标志,如果信号标志位真,则其他线程等待直到信号接触。

Event对象实现了简单的线程通信机制,它提供了设置信号,清除信号,等待等用于实现线程间的通信。

1.设置信号

使用Event的set()方法可以设置Event对象内部的信号标志为真。Event对象提供了isSet()方法来判断其内部信号标志的状态。当使用event对象的set()方法后,isSet()方法返回真

2 清除信号

使用Event的clear()方法可以清除Event对象内部的信号标志,即将其设为假,当使用Event的clear方法后,isSet()方法返回假

3 等待

使用Event的wait()方法只有在内部信号为真的时候才会很快的执行并完成返回。当Event对象的内部信号标志位假时,则wait方法一直等待到其为真时才返回。

代码:#!/usr/bin/envpython#-*-coding:utf-8-*-importthreadingimporttimedefprodecer():printu‘厨师:等人来买包子‘#先打印这句event.wait()#打印完上一句就等待consumer线程把False变成Trueevent.clear()#然后清除状态printu‘厨师:有人来买包子了‘#如果consumer把False变成True,就打印这一句print‘厨师:我在给你做包子‘#在打印这一句time.sleep(5)#停5秒钟print‘厨师:包子好了,来拿吧‘#打印这一句的时候把False变成True,告诉另一个线程event.set()defconsumer():printu‘张三:去买个包子吃‘event.set()#把False变成True告诉producer线程time.sleep(2)print‘张三:等着包子做好‘whileTrue:ifevent.isSet():print‘thanks‘breakelse:print‘张三:好了吗‘time.sleep(1)event=threading.Event()p1=threading.Thread(target=prodecer)c1=threading.Thread(target=consumer)p1.start()c1.start()结果:厨师:等人来买包子张三:去买个包子吃厨师:有人来买包子了厨师:我在给你做包子张三:等着包子做好张三:好了吗张三:好了吗张三:好了吗厨师:包子好了,来拿吧thanks

5.主机管理:paramiko

paramiko是基于python实现的SSH2远程安全连接,支持认证及密钥方式。可以实现远程命令执行、文件传输、中间SSH代理等功能,相对于Pexpect,封装的层次更高,更贴近SSH协议的功能。

安装:

python-develyum-yinstallpython-develpycrypto:https://www.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gztar-zxvfpycrypto-2.6.tar.gzcdpycrypto-2.6/pythonsetup.pybuild&&pythonsetup.pyinstall测试:python>>importCryptoecdsa:wgethttps://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.13.tar.gz#md5=1f60eda9cb5c46722856db41a3ae6670tar-zxvfecdsa-0.13.tar.gzpythonsetup.pyinstallparamiko:wgethttps://github.com/paramiko/paramiko/archive/v1.12.2.tar.gztar-zxvfv1.12.2.tar.gzcdparamiko-1.12.2/pythonsetup.pybuild&&pythonsetup.pyinstall测试:python>>importparamikoCryptoerror:‘module‘objecthasnoattribute‘HAVE_DECL_MPZ_POWM_SEC‘如果报这个错误请安装python-devel











本文出自 “翟军铭python” 博客,请务必保留此出处http://pythonzhai.blog.51cto.com/10391994/1745803

python(6)

评论关闭