程序與生產者消費者模型

2022-09-03 18:54:13 字數 4811 閱讀 7533

程序應用

1.遠端執行命令

#!/usr/src/python

# -*- coding:utf-8 -*-

import paramiko,time,re

from multiprocessing import process

import configparser

def cmd_remote(hostname,port,username,pwd,cmd):

ssh = paramiko.sshclient()

ssh.set_missing_host_key_policy(paramiko.autoaddpolicy())

ssh.connect(hostname,port,username,pwd)

stdin, stdout, stderr = ssh.exec_command(cmd)

res=stdout.read()

print('***************===='+hostname+'********************===\n'+res.decode('gbk'))

ssh.close();

if __name__ == '__main__':

conf=configparser.configparser()

conf.read("db\hostinfo")

sec_list=conf.sections()

while true:

cmd=input('prompt>>').strip()

server_group = re.findall(r'-g(.+?)-', cmd)

host_list = re.findall(r'-h(.+?)-', cmd)

cmd_list = re.findall(r'"(.+?)"', cmd)

if not cmd:continue

elif cmd=='exit':

break

elif re.match(r'^batch_run',cmd) and server_group and cmd_list:

res = server_group[0].strip()

single_group=res.split(',')

exe_cmd = cmd_list[0].strip()

for item in single_group:

opt=conf.options(item)

p_list=

for host in opt:

single_host = host_list[0].strip()

if host not in single_host:continue

host_dict=eval(conf.get(item,host))

hostname=host_dict['ip']

port=int(host_dict['port'])

username=host_dict['username']

pwd=host_dict['pwd']

p=process(target=cmd_remote,args=(hostname,port,username,pwd,exe_cmd))

for pro in p_list:

pro.start()

for pro in p_list:

pro.join()

else:

print('命令不對哦!只能是run和scp')

# batch_run -h h1,h2 -g mysql,web -cmd "df -h"

# batch_scp -h h1,h2 -g mysql,web -action put -local test.py -remote /tmp/

2.ftp上傳功能

#!/usr/src/python

# -*- coding:utf-8 -*-

import paramiko,time,re

from multiprocessing import process

import configparser

def cmd_scp(hostname,port,username,pwd,file_name,remote_path):

ssh = paramiko.sshclient()

ssh.set_missing_host_key_policy(paramiko.autoaddpolicy())

ssh.connect(hostname,port,username,pwd)

sftp = paramiko.sftpclient.from_transport(ssh.get_transport())

sftp = ssh.open_sftp()

try:

sftp.put(file_name, remote_path)

print('ok!')

except filenotfounderror:

print('本地目錄下沒有該檔案,請上傳已存在的檔案')

pass

# res=stdout.read()

# print('***************===='+hostname+'********************===\n'+res.decode('gbk'))

ssh.close();

if __name__ == '__main__':

conf=configparser.configparser()

conf.read("db\hostinfo")

sec_list=conf.sections()

while true:

cmd=input('prompt>>').strip()

server_group = re.findall(r'-g(.+?)-', cmd)

host_list = re.findall(r'-h(.+?)-', cmd)

remote_path = cmd.split(' ')[-1]

f_name = re.findall(r'-local(.+?)-remote', cmd)

oper = re.findall(r'-action(.+?)-local', cmd)

print(host_list)

if not cmd:continue

elif cmd=='exit':

break

elif re.match(r'^batch_scp',cmd) and server_group and f_name and re.search(r'/\s.*/', remote_path):

res = server_group[0].strip()

single_group=res.split(',')

file_name=f_name[0].strip()

print(file_name)

for item in single_group:

opt=conf.options(item)

p_list=

for host in opt:

single_host = host_list[0].strip()

if host not in single_host:continue

host_dict=eval(conf.get(item,host))

hostname=host_dict['ip']

port=int(host_dict['port'])

username=host_dict['username']

pwd=host_dict['pwd']

p=process(target=cmd_scp,args=(hostname,port,username,pwd,file_name,remote_path+file_name))

for pro in p_list:

pro.start()

for pro in p_list:

pro.join()

else:

print('命令不對哦!只能是run和scp')

#example

#batch_scp -h h1 -g mysql,web -action put -local exe_com.py -remote /tmp/

3.產生配置檔案

#!/usr/src/python

# -*- coding:utf-8 -*-

# 新增主機組及所屬主機

import configparser,json

conf=configparser.configparser()

conf.read("db\hostinfo")

while true:

sec=input('section:')

if sec=='exit':break

list_sec=conf.sections()

if sec not in list_sec:

conf.add_section(sec)

hostname=input('hostname:')

ip = input('ip:')

port = input('port:')

username=input('username:')

pwd = input('pwd:')

host_dic=

json_res=json.dumps(host_dic)

conf.set(sec,hostname,json_res)

conf.write(open('db\hostinfo', 'w'))

生產者與消費者模型

先介紹幾個函式 生產消費者模型 二者共享資料value,這裡,生產者是producter,消費者是consumer。生產者負責放物品到value中,消費者使用wait 等待生產者的通知。當得到通知後,消費者取出物品,並且用notify 通知生產者,可以再放下一批物品。例項 package cn.ed...

生產者與消費者模型

如圖 一共有三種關係 生產者與生產者的互斥關係,消費者與消費者的互斥關係,生產者與消費者的互斥且同步關係。兩種角色 生產者 執行緒 與消費者 執行緒 乙個交易場所 倉庫 一段記憶體空間,且可存可取 二 基於單向鍊錶的生產者消費者模型 1 我們這裡用乙個單鏈表當做那段共享記憶體,簡單實現生產者消費者模...

生產者與消費者模型

生產者 消費者模型描述的是有一塊緩衝區作為倉庫,生產者可將產品放入倉庫,消費者可以從倉庫中取出產品,模型圖如下所示 1 三種關係 三種關係分別指的是 消費者和消費者,生產者和生產者,生產者和消費者 其中消費者和消費者,生產者和生產者之間都屬於競爭關係,生產者和消費者之間的關係相當於是一種食物鏈之間的...