我需要創建一個後臺進程,等待傳入的命令並執行它們。下面的代碼:Python中的後臺進程
instance_tuple.popen = subprocess.Popen(['python',\
os.path.join(config['scripts_dir'],\
'instance_script.py')],\
stdin = subprocess.PIPE,\
stdout = subprocess.PIPE)
處理功能代碼:
if __name__ == '__main__':
config = dict()
is_config_valid = False
print 'Hello from instance process'
while True:
cmd_str = raw_input()
if (cmd_str.strip() != ''):
print 'received %s' % cmd_str
command = json.loads(cmd_str)
print 'received command: %s' % str(command)
sys.stdout.flush()
if command['name'] == 'set_variable':
name = command['args'][0]
value = command['args'][1]
config[name] = value
is_config_valid = validate_instance_dict(config)
elif is_config_valid:
if (command['name'] == 'init_model'):
config['instance'].init_model()
elif (command['name'] == 'get_tree'):
tree = config['instance'].get_fidesys_tree(command['args'])
result = CommandResult(command.name, tree)
print 'process exit'
這就是我如何將數據發送到過程: 月1日試運行工作正常:
(input, errors) = instance_tuple.popen \
.communicate(json.dumps({'name': 'name', 'args': list()}))
後來由於某種原因raw_input()
獲得EOF並且該過程退出。什麼是建立進程間通信的正確方法?
謝謝,我會考慮這樣做。 –
在MQ [比較文章](http://wiki.secondlife.com/wiki/Message_Queue_Evaluation_Notes)中,我讀到了Python zeromq擴展被破壞的說法。這些問題是否解決? –
另一件需要注意的事情是:'pyzmq'也有一些發送json或pickled python對象的好方法,你也可以'client.send_json({'name':'name','args':list()} )'或'client.send_pyobj()'。 – zeekay