參考:
僅用作測試,沒有實際價值
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
啓動主進程:
啓動工作進程:
主進程接收結果: