参考:
仅用作测试,没有实际价值
master服务器:192.168.3.244
worker服务器:192.168.216.134
主进程代码:
[root@localhost python]# cat task_master.py
#!/usr/bin/python3.5
#
import random, time, queue, os, stat
from multiprocessing.managers import BaseManager
task_queue = queue.Queue()
result_queue = queue.Queue()
class QueueManager(BaseManager):
pass
QueueManager.register('get_task_queue', callable=lambda: task_queue)
QueueManager.register('get_result_queue', callable=lambda: result_queue)
manager = QueueManager(address=('', 5000), authkey=b'abc')
manager.start()
task = manager.get_task_queue()
result = manager.get_result_queue()
outfile1 = open('/data/python/test.sh', 'w') #从客户端获取到的数据,存放的文件
for i in range(10):
n = random.randint(0, 10000)
print('Put task %d...' % n)
task.put(n)
print('Try get result...')
while True:
r = result.get()
if r == 'quit': #退出条件判断
outfile1.close() #关闭文件夹
os.chmod(outfile1.name, stat.S_IRWXU|stat.S_IRGRP|stat.S_IXGRP|stat.S_IROTH|stat.S_IXOTH) #更改文件权限为755
os.system(outfile1.name) #执行脚本
break #由于测试使用,所以这里退出
print(r, file=outfile1)
print('Receive input > %s' % (outfile1.name))
outfile1.flush()
manager.shutdown()
print('master exit.')
任务进程代码:
[root@localhost python]# cat task_worker.py
#!/usr/bin/python3.5
#
import time, sys, queue
from multiprocessing.managers import BaseManager
class QueueManager(BaseManager):
pass
QueueManager.register('get_task_queue')
QueueManager.register('get_result_queue')
server_addr = '192.168.3.244'
print('Connect to server %s...' % server_addr)
m = QueueManager(address=(server_addr, 5000), authkey=b'abc')
m.connect()
task = m.get_task_queue()
result = m.get_result_queue()
f = open('/data/python/task.sh') #打开要传输的文件
for i in f.readlines():
# try:
#n = task.get(timeout=1)
#print('run task %d * %d...' % (n, n))
r = i.strip('\n') #去除换行符
time.sleep(1)
result.put(r)
# except Queue.Empty:
# print('task queue is empty.')
r = 'quit' #结束符
result.put(r)
print('worker exit.')
f.close()
要传输的脚本代码:
[root@localhost python]# cat task.sh #!/bin/bash #获取eth0的ip,并存入ip.txt文件 # current_dir=`pwd` ipad=`ifconfig eth0|grep -oP '(?<=addr:)[^ ]*'` echo "$ipad" > $current_dir/ip.txt
启动主进程:
启动工作进程:
主进程接收结果:
转载于:https://blog.51cto.com/zzh0804/1834749