参考:

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431929340191970154d52b9d484b88a7b343708fcc60000

     仅用作测试,没有实际价值

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

启动主进程:

python分布式进程传送脚本文件并执行_import

启动工作进程:

 python分布式进程传送脚本文件并执行_python_02

主进程接收结果:

python分布式进程传送脚本文件并执行_python_03