收集IronPython并行循环结果

时间:2019-04-25 03:12:57

标签: python .net task-parallel-library ironpython parallel.foreach

我正在尝试从IronPython中的task方法获得结果,类似于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,但是我找不到任何合适的文档。最接近的是this post,但它正在递增,我需要返回一个数组。

1 个答案:

答案 0 :(得分:1)

Parallel.ForEach是一个多处理操作,但是鉴于您希望从操作中得到结果,您将不得不使用共享结果变量(例如某种concurrent collection)或使用{{ 3}}。

接近样本的方法如下:

# 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()