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的主要内容,如果未能解决你的问题,请参考以下文章

Python 向 Postman 请求代码片段

python [代码片段]一些有趣的代码#sort

使用 Python 代码片段编写 LaTeX 文档

python 机器学习有用的代码片段

python 代码片段和解决方案

python 来自puddletag的代码片段