41 lines
1.0 KiB
Python
41 lines
1.0 KiB
Python
from multiprocessing import Process, Queue
|
|
import time
|
|
from typing import List
|
|
import os
|
|
|
|
|
|
class Worker(object):
|
|
def __init__(self, queue: Queue):
|
|
self.run_flag = True
|
|
self.queue = queue
|
|
self.process = Process(
|
|
target=self.handle_jobs,
|
|
args=(self.queue,)
|
|
)
|
|
time.sleep(1)
|
|
self.process.start()
|
|
|
|
def stop(self):
|
|
self.queue.put(['exit'])
|
|
self.process.join()
|
|
|
|
@staticmethod
|
|
def handle_jobs(queue: Queue):
|
|
while True:
|
|
if queue.empty():
|
|
time.sleep(1)
|
|
continue
|
|
cmd_list: List[str] = queue.get()
|
|
print('received job:\n', cmd_list)
|
|
if cmd_list[0].lower() == 'exit':
|
|
break
|
|
cmd_str = ' && '.join(cmd_list)
|
|
os.system(cmd_str)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
work_queue: Queue = Queue()
|
|
worker = Worker(queue=work_queue)
|
|
work_queue.put(['echo "hello world"', 'echo "hello world again"'])
|
|
worker.stop()
|