python分佈式進程傳送腳本文件並執行

參考:

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

啓動主進程:

wKiom1ekN3Ogpr1kAAAX1hp-z6I359.png-wh_50

啓動工作進程:

 wKiom1ekN3PShqiLAAASFQIEDXg428.png-wh_50

主進程接收結果:

wKioL1ekN3OSVUcAAAClz3qQc14235.png-wh_50




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章