дал следующий код Python:Python многопроцессорной, Pool карта - отменить все запущенные процессы, если один, возвращает желаемый результат
import multiprocessing
def unique(somelist):
return len(set(somelist)) == len(somelist)
if __name__ == '__main__':
somelist = [[1,2,3,4,5,6,7,8,9,10,11,12,13,2], [1,2,3,4,5], [1,2,3,4,5,6,7,8,9,1], [0,1,5,1]]
pool = multiprocessing.Pool()
reslist = pool.map(unique, somelist)
pool.close()
pool.join()
print "Done!"
print reslist
Теперь представьте, что списки с целыми числами в этой игрушке, например, чрезвычайно долго, и то, что я хотел бы получить здесь, следующее: если один из списков в somelist возвращает True, убейте все запущенные процессы.
Это приводит к двум вопросам (и, вероятно, больше, которые я не придумал):
Как я могу прочитать «»/«слушать» из готового процесса результата, в то время как другие процессы бегут? Если, например, процесс имеет дело с [1,2,3,4,5] от somelist и закончен перед всеми другими процессами, как я могу прочитать результат этого процесса в этот самый момент?
Учитывая, что можно «прочитать» результат завершенного процесса во время работы другого: как я могу использовать этот результат в качестве условия для прекращения всех других запущенных процессов?
например. если один процесс завершил и вернул True, как я могу использовать это как условие для прекращения всех других (все еще) запущенных процессов?
Заранее спасибо за любые подсказки Dan
сломаться Также цикл, в противном случае вы могли бы застрять ожидая следующего результата после завершения пула. –
хороший улов, спасибо :) –