当前位置: 首页 > news >正文

秦皇岛 网站建设网站开发网页

秦皇岛 网站建设,网站开发网页,亲情网络广告推广怎么做,泗泾做网站公司本节内容 主机管理之paramiko模块学习 进程、与线程区别python GIL全局解释器锁线程语法join线程锁之Lock\Rlock\信号量将线程变为守护进程Event事件 queue队列生产者消费者模型Queue队列开发一个线程池进程语法进程间通讯进程池 转载#xff1a;  http://www.cnblogs.co…本节内容 主机管理之paramiko模块学习  进程、与线程区别python GIL全局解释器锁线程语法join线程锁之Lock\Rlock\信号量将线程变为守护进程Event事件 queue队列生产者消费者模型Queue队列开发一个线程池进程语法进程间通讯进程池 转载  http://www.cnblogs.com/alex3714/articles/5230609.html  paramiko模块学习 SSHClient用于连接远程服务器并执行基本命令 基于用户名密码连接 1 import paramiko2 3 # 创建SSH对象4 ssh paramiko.SSHClient()5 # 允许连接不在know_hosts文件中的主机6 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())7 # 连接服务器8 ssh.connect(hostnamec1.salt.com, port22, usernamewupeiqi, password123)9 10 # 执行命令 11 stdin, stdout, stderr ssh.exec_command(df) 12 # 获取命令结果 13 result stdout.read() 14 15 # 关闭连接 16 ssh.close() import paramikotransport paramiko.Transport((hostname, 22)) transport.connect(usernamewupeiqi, password123)ssh paramiko.SSHClient() ssh._transport transportstdin, stdout, stderr ssh.exec_command(df) print stdout.read()transport.close() SSHClient 封装 Transport 基于公钥密钥连接 1 import paramiko2 3 private_key paramiko.RSAKey.from_private_key_file(/home/auto/.ssh/id_rsa)4 5 # 创建SSH对象6 ssh paramiko.SSHClient()7 # 允许连接不在know_hosts文件中的主机8 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())9 # 连接服务器 10 ssh.connect(hostnamec1.salt.com, port22, usernamewupeiqi, keyprivate_key) 11 12 # 执行命令 13 stdin, stdout, stderr ssh.exec_command(df) 14 # 获取命令结果 15 result stdout.read() 16 17 # 关闭连接 18 ssh.close() import paramikoprivate_key paramiko.RSAKey.from_private_key_file(/home/auto/.ssh/id_rsa)transport paramiko.Transport((hostname, 22)) transport.connect(usernamewupeiqi, pkeyprivate_key)ssh paramiko.SSHClient() ssh._transport transportstdin, stdout, stderr ssh.exec_command(df)transport.close() 封装Transport连接 import paramiko from io import StringIOkey_str -----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAq7gLsqYArAFco02/55IgNg0r7NXOtEM3qXpb/dabJ5Uyky/8 NEHhFiQ7deHIRIuTW5Zb0kD6h6EBbVlUMBmwJrC2oSzySLU1wZNfH0PE6W6fans H80whhuc/YgPfjiOVR/gFcqib8Rll5UfYzf5H8uuOnDeIXGCVgyHQSmt8if1e 7hn1MVO1Lrm9Fco8ABI7dyv8/ZEwoSfh2C9rGYgA58LT1FkBRkOePbHD43xNfAYC tfLvz6LErMnwdOW4sNMEWWAWv1fsTB35PAm5CazfKzmam9n5IQXhmUNcNvmaZtvP c4f4g59mdsaWNtNaY96UjOfx83Om86gmdkKcnwIDAQABAoIBAQCnDBGFJuv8aA7A ZkBLeGN815JtOyye7lIS1n2I7En3oImoUWNaJEYwwJ8LmjxMwDCtAkR0XwbvY cnsKPEtkjb3sAu6I148RmwWsGncSRqUaJrljOypaW9dSGO4Ujjz3/lw1lrxSUh IqVc0E7kyRW8kP3QCaNBwArYteHreZFFp6XmtKMtXaEA3saJYILxaaXlYkoRi4k8 S2/K8aw3ZMR4tDCOfB4o47JaeiA/e185RK3AmLn9xTDhTdZqTQpv17/YRPcgmwz zu30fhVXQT/SuI0sObzCO4YGoEwoBX718AWhdLJFoFq1B7k2ZEzXTAtjEXQEWm6 01ndU/jhAasdfasdasdfasdfa3eraszxqwefasdfadasdffsFIfAsjQb4HdkmHuC OeJrJOdCYvdEeqJJNnF6AbHyYHIECkj0Qq1kEfLOEsqzd5nDbtkKBte6M1trbjl HtJ2Yb8w6o/q/6Sbj7wf/cW3LIYEdeVCjScozVcQ9R83ea05JQOAr4nAoGBAMaq UzLJfLNWZ5Qosmir2oHStFlZpxspax/ln7DlWLW4wPB4YJalSVovF2Buo8hr8X65 lnPiE41MG0Z7icEXiFyDBFDCtzx0x/RmaBokLathrFtI81UCx4gQPLaSVNMlvQA 539GsubSrO4LpHRNGg/weZ6EqQOXvHvkUkm2bDDJAoGATytFNxen6GtC0ZT3SRQM WYfasdf3xbtuykmnluiofasd2sfmjnljkt7khghmghdasSDFGQfgaFoKfaawoYeH C2XasVUsVviBn8kPSLSVBPX4JUfQmA6h8HsajeVahxN1U9e0nYJ0sYDQFUMTS2t8 RT57WK/0ONwTWHduKnaJECgYEAid/ta8LQC3p82iNAZkpWlGDSD2yb/8rH8NQg 9tjEryFwrbMtfX9qn8srx06B796U3OjifstjJQNmVI0qNlsJpQK8fPwVxRxbJS/ pMbNICrf3sUa4sZgDOFfkeuSlgACh4cVIozDXlR59Z8Y3CoiW0uObEgvMDIfenAj 98pl3ZkCgYEAj/UCSni0dwX4pnKNPm6LUgiS7QvIgM3H9piyt8aipQuzBi5LUKWw DlQC4Zb73nHgdREtQYYXTu7p27Bl0Gizz1sW2eSgxFU8eThucfVwOXKAXKU5SeI MbuBfUYQ4if2N/BXn47/ecf3A4KgB37Le5SbLDddwCNxGlBzbpBa0 -----END RSA PRIVATE KEY-----private_key paramiko.RSAKey(file_objStringIO(key_str)) transport paramiko.Transport((10.0.1.40, 22)) transport.connect(usernamewupeiqi, pkeyprivate_key)ssh paramiko.SSHClient() ssh._transport transportstdin, stdout, stderr ssh.exec_command(df) result stdout.read()transport.close()print(result) 封装Transport私钥   SFTPClient 用于连接远程服务器并执行上传下载 基于用户名密码上传下载 1 import paramiko2 3 transport paramiko.Transport((hostname,22))4 transport.connect(usernamewupeiqi,password123)5 6 sftp paramiko.SFTPClient.from_transport(transport)7 # 将location.py 上传至服务器 /tmp/test.py8 sftp.put(/tmp/location.py, /tmp/test.py)9 # 将remove_path 下载到本地 local_path 10 sftp.get(remove_path, local_path) 11 12 transport.close() 基于公钥密钥上传下载 1 import paramiko2 3 private_key paramiko.RSAKey.from_private_key_file(/home/auto/.ssh/id_rsa)4 5 transport paramiko.Transport((hostname, 22))6 transport.connect(usernamewupeiqi, pkeyprivate_key )7 8 sftp paramiko.SFTPClient.from_transport(transport)9 # 将location.py 上传至服务器 /tmp/test.py 10 sftp.put(/tmp/location.py, /tmp/test.py) 11 # 将remove_path 下载到本地 local_path 12 sftp.get(remove_path, local_path) 13 14 transport.close()   实例 #!/usr/bin/env python # -*- coding:utf-8 -*- import paramiko import uuidclass Haproxy(object):def __init__(self):self.host 172.16.103.191self.port 22self.username wupeiqiself.pwd 123self.__k Nonedef create_file(self):file_name str(uuid.uuid4())with open(file_name,w) as f:f.write(sb)return file_namedef run(self):self.connect()self.upload()self.rename()self.close()def connect(self):transport paramiko.Transport((self.host,self.port))transport.connect(usernameself.username,passwordself.pwd)self.__transport transportdef close(self):self.__transport.close()def upload(self):# 连接上传file_name self.create_file()sftp paramiko.SFTPClient.from_transport(self.__transport)# 将location.py 上传至服务器 /tmp/test.pysftp.put(file_name, /home/wupeiqi/tttttttttttt.py)def rename(self):ssh paramiko.SSHClient()ssh._transport self.__transport# 执行命令stdin, stdout, stderr ssh.exec_command(mv /home/wupeiqi/tttttttttttt.py /home/wupeiqi/ooooooooo.py)# 获取命令结果result stdout.read()ha Haproxy() ha.run()Demo View Code     进程与线程 什么是进程(process) 程序并不能单独运行只有将程序装载到内存中系统为它分配资源才能运行而这种执行的程序就称之为进程。程序和进程的区别就在于程序是指令的集合它是进程运行的静态描述文本进程是程序的一次执行活动属于动态概念。 在多道编程中我们允许多个程序同时加载到内存中在操作系统的调度下可以实现并发地执行。这是这样的设计大大提高了CPU的利用率。进程的出现让每个用户感觉到自己独享CPU因此进程就是为了在CPU上实现多道编程而提出的。 有了进程为什么还要线程 进程有很多优点它提供了多道编程让我们感觉我们每个人都拥有自己的CPU和其他资源可以提高计算机的利用率。很多人就不理解了既然进程这么优秀为什么还要线程呢其实仔细观察就会发现进程还是有很多缺陷的主要体现在两点上 进程只能在一个时间干一件事如果想同时干两件事或多件事进程就无能为力了。 进程在执行的过程中如果阻塞例如等待输入整个进程就会挂起即使进程中有些工作不依赖于输入的数据也将无法执行。   例如我们在使用qq聊天 qq做为一个独立进程如果同一时间只能干一件事那他如何实现在同一时刻 即能监听键盘输入、又能监听其它人给你发的消息、同时还能把别人发的消息显示在屏幕上呢你会说操作系统不是有分时么但我的亲分时是指在不同进程间的分时呀 即操作系统处理一会你的qq任务又切换到word文档任务上了每个cpu时间片分给你的qq程序时你的qq还是只能同时干一件事呀。 再直白一点 一个操作系统就像是一个工厂工厂里面有很多个生产车间不同的车间生产不同的产品每个车间就相当于一个进程且你的工厂又穷供电不足同一时间只能给一个车间供电为了能让所有车间都能同时生产你的工厂的电工只能给不同的车间分时供电但是轮到你的qq车间时发现只有一个干活的工人结果生产效率极低为了解决这个问题应该怎么办呢。。。。没错你肯定想到了就是多加几个工人让几个人工人并行工作这每个工人就是线程   什么是线程(thread) 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流一个进程中可以并发多个线程每条线程并行执行不同的任务   总结 进程: qq 要以一个整体的形式暴露给操作系统管理里面包含对各种资源的调用内存的管理网络接口的调用等。。。对各种资源管理的集合 就可以成为 进程 线程: 是操作系统最小的调度单位 是一串指令的集合   进程与线程的区别 1-线程共享内存空间进程的内存是独立的 2-同一个进程的线程之间可以直接交流两个进程想通信必须通过一个中间代理来实现 3-创建新线程很简单 创建新进程需要对其父进程进行一次克隆 4-一个线程可以控制和操作同一进程里的其他线程但是进程只能操作子进程   Python threading模块 1-线程的调用 2-join等待运行结束  setDaemon守护进程 3-线程锁(互斥锁Mutex) 4-Semaphore(信号量)允许最大允许线程数 5-Events 事件是一个简单的同步对象; 该事件表示一个内部标志和线程可以等待标志设置或设置或清除标志本身。 event threading.Event 客户端线程可以等待标志被设置event.wait 一个服务器线程可以设置或重置它event.setevent.clear如果设置了该标志则wait方法不会执行任何操作。如果标志被清除等待将阻塞直到它再次设置。任何数量的线程可能会等待相同的事件。 通过Event来实现两个或多个线程间的交互下面是一个红绿灯的例子即起动一个线程做交通指挥灯生成几个线程做车辆车辆行驶按红灯停绿灯行的规则。 1 import threading,time2 import random3 def light():4 if not event.isSet():5 event.set() #wait就不阻塞 #绿灯状态6 count 07 while True:8 if count 10:9 print(\033[42;1m--green light on---\033[0m) 10 elif count 13: 11 print(\033[43;1m--yellow light on---\033[0m) 12 elif count 20: 13 if event.isSet(): 14 event.clear() 15 print(\033[41;1m--red light on---\033[0m) 16 else: 17 count 0 18 event.set() #打开绿灯 19 time.sleep(1) 20 count 1 21 def car(n): 22 while 1: 23 time.sleep(random.randrange(10)) 24 if event.isSet(): #绿灯 25 print(car [%s] is running.. % n) 26 else: 27 print(car [%s] is waiting for the red light.. %n) 28 if __name__ __main__: 29 event threading.Event() 30 Light threading.Thread(targetlight) 31 Light.start() 32 for i in range(3): 33 t threading.Thread(targetcar,args(i,)) 34 t.start()   queue队列  作用 1-解耦使程序直接实现松耦合 2-提高处理效率 class queue.Queue(maxsize0) #先入先出 class queue.LifoQueue(maxsize0) #last in fisrt out class queue.PriorityQueue(maxsize0) #存储数据时可设置优先级的队列 1 import queue2 3 q queue.PriorityQueue()4 5 q.put((-1,A))6 q.put((3,B))7 q.put((10,C))8 q.put((6,A1))9 10 print(q.get()) 11 print(q.get()) 12 print(q.get()) 13 print(q.get()) View Code   生产者消费者模型 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。 为什么要使用生产者和消费者模式 在线程世界里生产者就是生产数据的线程消费者就是消费数据的线程。在多线程开发当中如果生产者处理速度很快而消费者处理速度很慢那么生产者就必须等待消费者处理完才能继续生产数据。同样的道理如果消费者的处理能力大于生产者那么消费者就必须等待生产者。为了解决这个问题于是引入了生产者和消费者模式。 什么是生产者消费者模式 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯而通过阻塞队列来进行通讯所以生产者生产完数据之后不用等待消费者处理直接扔给阻塞队列消费者不找生产者要数据而是直接从阻塞队列里取阻塞队列就相当于一个缓冲区平衡了生产者和消费者的处理能力。   下面来学习一个最基本的生产者消费者模型的例子 1 import threading,time2 3 import queue4 5 q queue.Queue(maxsize10)6 7 def Producer(name):8 count 19 while True: 10 q.put(骨头%s % count) 11 print(生产了骨头,count) 12 count 1 13 time.sleep(0.1) 14 15 16 17 def Consumer(name): 18 #while q.qsize()0: 19 while True: 20 print([%s] 取到[%s] 并且吃了它... %(name, q.get())) 21 time.sleep(1) 22 23 24 25 p threading.Thread(targetProducer,args(A1,)) 26 c threading.Thread(targetConsumer,args(q1,)) 27 c1 threading.Thread(targetConsumer,args(q2,)) 28 29 30 p.start() 31 c.start() 32 c1.start() View Code   1 import time,random2 import queue,threading3 q queue.Queue()#线程的queue,实例化4 def Producer(name):5 count 06 while count 20:7 time.sleep(random.randrange(3))8 q.put(count)9 print(Producer %s has produced %s baozi.. %(name, count)) 10 count 1 11 def Consumer(name): 12 count 0 13 while count 20: 14 time.sleep(random.randrange(4)) 15 if not q.empty(): 16 data q.get() 17 print(data) 18 print(\033[32;1mConsumer %s has eat %s baozi...\033[0m %(name, data)) 19 else: 20 print(-----no baozi anymore----) 21 count 1 22 p1 threading.Thread(targetProducer, args(A,)) 23 c1 threading.Thread(targetConsumer, args(B,)) 24 p1.start() 25 c1.start()   多进程multiprocessing 多进程是一个使用类似于线程模块的API来支持产卵过程的包。 多处理包提供本地和远程并发通过使用子进程而不是线程来有效地侧移全局解释器锁。 因此多处理模块允许程序员充分利用给定机器上的多个处理器。 进程间通讯   不同进程间内存是不共享的要想实现两个进程间的数据交换可以用以下方法 Queues 使用方法跟threading里的queue差不多 1 from multiprocessing import Process, Queue2 3 def f(q):4 q.put([42, None, hello])5 6 if __name__ __main__:7 q Queue()8 p Process(targetf, args(q,))9 p.start() 10 print(q.get()) # prints [42, None, hello] 11 p.join()   进程数据共享 进程各自持有一份数据默认无法共享数据 1 from multiprocessing import Process, Manager2 3 def f(d, l):4 d[1] 15 d[2]26 d[3]None7 l.append(1)8 print(l)9 10 11 if __name__ __main__: 12 with Manager() as manager: 13 d manager.dict() 14 15 l manager.list(range(5)) 16 p_list [] 17 for i in range(3): 18 p Process(targetf, args(d, l)) 19 p.start() 20 p_list.append(p) 21 for res in p_list: 22 res.join() 23 print(d)#{1: 1, 3: None, 2: 2} 24 print(l)#[0, 1, 2, 3, 4, 1, 1, 1] 进程同步-进程锁 当创建进程时非使用时共享数据会被拿到子进程中当进程中执行完毕后再赋值给原值。 1 from multiprocessing import Process, Lock2 3 4 def f(l, i):5 l.acquire()6 print(hello world, i)7 l.release()8 9 10 if __name__ __main__: 11 lock Lock() 12 13 for num in range(100): 14 Process(targetf, args(lock, num)).start() 进程锁   进程池   进程池内部维护一个进程序列当使用时则去进程池中获取一个进程如果进程池序列中没有可供使用的进进程那么程序就会等待直到进程池中有可用进程为止。 进程池中有两个方法 applyapply_async 1 from multiprocessing import Process, Pool,freeze_support2 import time3 import os4 5 def Foo(i):6 time.sleep(2)7 print(in process,os.getpid())8 return i 1009 10 def Bar(arg): 11 print(--exec done:, arg,os.getpid()) 12 13 if __name__ __main__: 14 #freeze_support()#windows下的要加 15 pool Pool(processes3) #允许进程池同时放入3个进程 16 print(主进程,os.getpid()) 17 for i in range(7): 18 pool.apply_async(funcFoo, args(i,), callbackBar) #callback回调,调用bar方法 19 #pool.apply(funcFoo, args(i,)) #串行 20 #pool.apply_async(funcFoo, args(i,)) #串行非阻塞时运行 21 print(end) 22 pool.close()#一定要加上 23 pool.join() #进程池中进程执行完毕后再关闭如果注释那么程序直接关闭。.join() View Code  转载于:https://www.cnblogs.com/liguanqiu/p/6734143.html
http://www.sadfv.cn/news/320208/

相关文章:

  • 网站怎么添加模块网站的代理页面怎么做的
  • 企业宣传网站建设需求说明书设计网站怎么做
  • 国内设计师个人网站网站建设一条龙怎么样
  • 爱网站站长工具开发区招聘网最新招聘
  • 公共服务平台网站建设方案佛山网站建设费用预算
  • 免费素材网站可商用网站搭建怎么收费
  • tp框架做响应式网站wordpress可以做博客吗
  • 兰州做网站网络平台怎么制作
  • 个人购物网站 怎么建网络推广平台哪家公司最好
  • 北京设计网站的公司哪家好北京酒店设计公司
  • 汉口江岸区城市建设局网站网页改进方案
  • 自助建设彩票网站wordpress下一篇调用
  • 支付网站建设费入什么科目增城门户网站
  • 网站开发就业方向网站支持asp
  • 潍坊市住房和城乡建设厅网站网站设计的基本知识结构
  • 高邮市城乡建设局网站交互式网站
  • 大气网站背景图企业年金什么时候可以提取
  • 长沙网站seo收费标准网站备案 注意
  • 网站找到后台了 如何破解账号 密码邢台wap网站建设费用
  • 网站建设人员百姓网为什么不能创建地址
  • 做城通网盘资源网站的源码仿大学网站网页代码
  • asp.net mvc 手机网站江苏市场监督管理局旗舰店
  • 全景网站app网站优化人员通常会将目标关键词放在网站首页中的
  • 投资做网站网站宽屏
  • 上海网站建设 销售网络推广好做吗多少钱
  • 金坛城乡建设管理网站没有足够的权限卸载2345网址导航
  • 优质的网站建设公司水泵网站站群建设
  • 自己开网站能赚钱吗网络平台制作公司
  • 公司网站建设推广方案模板重庆建设工程信息网官网加密锁安装驱动
  • dede修改网站密码中国建设银行的网站用户名是什么