python
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python相关的知识,希望对你有一定的参考价值。
多线程开发
1、threading.Thread模块
·start
·getName():获取名称
·setName():设置名称
·isDaemon()
·setDaemon()
·join(timeout):进程等线程的时候,比如timeout等于5就是执行到线程的时候进程等线程5秒钟,如果线程执行超过5秒就不等待,继续执行进程
·run()
2、多线程开发创建线程
代码: from threading import Thread def Foo(arg): print arg t1 = Thread(target=Foo,args=(1,)) t1.start() 结果: 1
3、生产者-消费者模型 (关于概念在上篇博客已经写出)
代码 1#!/usr/bin/env python # -*- coding: utf-8 -*- import threading import time import random import Queue #队列模块 def Producer(name,que): #生产者 while True: que.put(‘包子‘) #相当于把包子放到仓库里 print ‘%s:做了一个包子‘ %name #打印出做了一个包子出来 time.sleep(random.randrange(5)) #厨师5秒内做出一个包子 def Consumer(name,que): #消费者 while True: try: #异常处理,如果碰到没有包子可吃就等待厨师做包子 que.get_nowait() print ‘%s:吃了一个包子‘ %name except Exception: print u‘没有包子了‘ 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/env python #coding:utf-8 import threading import time gl_num = 0 lock = threading.Lock() def Func(): lock.acquire() global gl_num gl_num +=1 time.sleep(1) print gl_num lock.release() for i in range(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/env python # -*- coding: utf-8 -*- import threading import time def prodecer(): print u‘厨师:等人来买包子‘ #先打印这句 event.wait() #打印完上一句就等待consumer线程把False变成True event.clear() #然后清除状态 print u‘厨师:有人来买包子了‘ #如果consumer把False变成True,就打印这一句 print ‘厨师:我在给你做包子‘ #在打印这一句 time.sleep(5) #停5秒钟 print ‘厨师:包子好了,来拿吧‘ #打印这一句的时候把False变成True,告诉另一个线程 event.set() def consumer(): print u‘张三:去买个包子吃‘ event.set() #把False变成True告诉producer线程 time.sleep(2) print ‘张三:等着包子做好‘ while True: if event.isSet(): print ‘thanks‘ break else: 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-devel yum -y install python-devel pycrypto: https://www.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz tar -zxvf pycrypto-2.6.tar.gz cd pycrypto-2.6/ python setup.py build && python setup.py install 测试:python>> import Crypto ecdsa: wget https://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.13.tar.gz#md5=1f60eda9cb5c46722856db41a3ae6670 tar -zxvf ecdsa-0.13.tar.gz python setup.py install paramiko: wget https://github.com/paramiko/paramiko/archive/v1.12.2.tar.gz tar -zxvf v1.12.2.tar.gz cd paramiko-1.12.2/ python setup.py build && python setup.py install 测试:python>> import paramiko Crypto error: ‘module‘ object has no attribute ‘HAVE_DECL_MPZ_POWM_SEC‘ 如果报这个错误请安装python-devel
本文出自 “翟军铭python” 博客,请务必保留此出处http://pythonzhai.blog.51cto.com/10391994/1745803
以上是关于python的主要内容,如果未能解决你的问题,请参考以下文章