小编And*_*ean的帖子

嵌套concurrent.futures.ThreadPoolExecutor

我有一个程序,我目前正在使用concurrent.futures.ThreadPoolExecutor同时运行多个任务.这些任务通常受I/O限制,涉及对本地数据库和远程REST API的访问.但是,这些任务本身可以分成子任务,这也可以从并发中受益.

我希望在任务中使用concurrent.futures.ThreadPoolExecutor是安全的.我编写了一个玩具示例,它似乎有效:

import concurrent.futures


def inner(i, j):
    return i, j, i**j


def outer(i):
    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
        futures = {executor.submit(inner, i, j): j for j in range(5)}
        results = []
        for future in concurrent.futures.as_completed(futures):
            results.append(future.result())
    return results


def main():
    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
        futures = {executor.submit(outer, i): i for i in range(10)}
        results = []
        for future in concurrent.futures.as_completed(futures):
            results.extend(future.result())
    print(results)


if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

尽管这个玩具示例似乎有效,但我还是有信心这是故意的.我希望它是,因为否则使用执行程序执行任意代码是不安全的,以防它也使用concurrent.futures来利用并发.

python multithreading python-multithreading python-3.x concurrent.futures

13
推荐指数
1
解决办法
1404
查看次数

有效地将Java列表转换为Matlab矩阵

我从Matlab调用Google Protocol Buffers Java API.这很好用,但我遇到了很大的性能瓶颈.大部分数据作为以下类型的对象返回:

java.util.Collections$UnmodifiableRandomAccessList
Run Code Online (Sandbox Code Playgroud)

它们实际上包含一个浮点列表.我需要将其转换为Matlab矩阵.到目前为止,我发现的最佳方法是致电:

cell2mat(cell(Q.toArray()))
Run Code Online (Sandbox Code Playgroud)

但是,这一行是代码中的巨大性能瓶颈.

注意我知道Google Protocol Buffers的FarSounder Matlab解析器生成器,遗憾的是这些生成器非常慢.请参阅下文,了解我的问题(YMMV)的一些粗略基准速度.高是好的.

  • Farsounder Matlab:0.03
  • 纯Python:1
  • 从Matlab调用的Java API(仅解析和提取元数据):10
  • 从Matlab调用的Java API(解析和提取元数据和数据):0.25

如果不是为了将转换java.util.Collections$UnmodifiableRandomAccessList 为Matlab矩阵的开销,那么从Matlab调用Java API的方法看起来很有希望.

有没有更好的方法将这个Java对象转换为Matlab矩阵?

请记住,返回此类型的方法是自动生成的代码.

java matlab protocol-buffers

4
推荐指数
1
解决办法
628
查看次数