Сбор результатов IronPython Parallel Loop - PullRequest
1 голос
/ 25 апреля 2019

Я пытаюсь получить результат из метода задач в IronPython, аналогичного тому, как results.get работает с CPython multiprocessing.Queue

from System.Threading.Tasks import *
def testThread(dataPnt,constData):
    return dataPnt

def main():

    dataToSplit = range(5)
    constData = 10

    threadResult = Parallel.ForEach(dataToSplit, lambda dataPnt: testThread(dataPnt,constData))

    print(threadResult)

main()

На данный момент threadResult равен System.Threading.Tasks.ParallelLoopResult, но я не могу найти приличную документацию. Ближайшим был этот пост , но он увеличивается, и мне нужен возвращаемый массив.

1 Ответ

1 голос
/ 26 апреля 2019

Parallel.ForEach - это многопроцессорная операция, но, учитывая, что вы ожидаете результата от вашей операции, вам придется либо использовать общую переменную результата (например, какой-то одновременный набор * 1004)*) или используйте параллельную проекцию LINQ .

Подход, близкий к вашему образцу, может выглядеть следующим образом:

# get LINQ dependencies
import clr
clr.AddReference("System.Core")
import System
clr.ImportExtensions(System.Linq)

from System.Threading.Tasks import *
def testThread(dataPnt,constData):
    print dataPnt
    return dataPnt

def main():

    dataToSplit = range(5)
    constData = 10

    threadResult = dataToSplit.AsParallel().Select(lambda dataPnt: testThread(dataPnt,constData)).ToList()

    print(threadResult)

main()
...