Запуск python 2.7 на MAC:
У меня есть относительно простая настройка многопроцессорной обработки / очереди, но я не могу получить какие-либо результаты из своей очереди.Dispatcher2 вызывается для многопоточных вызовов к классу Connector (), который принимает команды от Dispatcher, открывает ssh-подключения к устройствам, выполняет диагностические команды, а затем возвращает данные в объект Result ().
class Dispatcher2(object):
def __init__(self):
self.jobs = []
self.process_list = list()
self.jobs_list = list()
self.result_list = list()
def wrangle(self, cmd_obj):
logger.debug("wrangling a connection")
for target in cmd_obj.target_list:
q = Queue()
cmd_obj.current_target = target
p = Process(target=self.connect, args=(cmd_obj, q))
self.process_list.append(p)
self.jobs_list.append(q)
p.start()
self.close_processes()
self.process_response(q)
def connect(self, cmd_obj, q):
c = Connector(cmd_obj)
result = c.attack()
print "RECEIVING RESULT %s" %result
if result:
q.put(result)
else:
return False
def process_response(self, q):
logger.info("processing response")
print len(self.jobs_list)
for job in self.jobs_list:
try:
res = job.join()
print "RESULT is %s" %res
except Exception as e:
print "ERROR: %s" %e
continue
def close_processes(self):
for process in self.process_list:
process.join()
Если я вызываю process_response () после закрытия моего списка процессов (как описано выше), я показываю объект Result (), возвращенный из Connector () в функцию connect (), но q.put () выглядит каксбой в connect (), потому что при выполнении process_response ():
- self.jobs_list имеет длину 4 элемента (как и ожидалось)
- все очереди, добавленные в jobs_list, отсутствуют
Я играл с этим по-разному - я сделал это, не используя список для агрегирования очередей и просто используя 1 очередь, и я попытался вызвать join для процессов, прежде чем пытатьсяget () из очереди и после - кажется, ничего не работает, и я в замешательстве, потому что это довольно простая реализация multiprocessing.
Любая помощь будет принята с благодарностью!Спасибо!