参考:
仅用作测试,没有实际价值
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
启动主进程:
启动工作进程:
主进程接收结果: