小编Pat*_*ins的帖子

ThreadPoolExecutor().map与ThreadPoolExecutor()有何不同?提交?

我对我编写的一些代码感到非常困惑.我惊讶地发现:

with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
    results = list(executor.map(f, iterable))
Run Code Online (Sandbox Code Playgroud)

with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
    results = list(map(lambda x: executor.submit(f, x), iterable))
Run Code Online (Sandbox Code Playgroud)

产生不同的结果.第一个产生任何类型f返回的列表,第二个产生一个concurrent.futures.Future对象列表,然后需要使用它们的result()方法进行评估,以获得f返回的值.

我主要担心的是,这意味着executor.map无法利用concurrent.futures.as_completed,这似乎是一种非常方便的方法来评估我正在进行的数据库长期运行调用的结果.

关于concurrent.futures.ThreadPoolExecutor对象是如何工作的我一点都不清楚- 天真地,我更喜欢(稍微冗长一点):

with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
    result_futures = list(map(lambda x: executor.submit(f, x), iterable))
    results = [f.result() for f in futures.as_completed(result_futures)]
Run Code Online (Sandbox Code Playgroud)

executor.map为了利用可能的性能提升,更简洁.我错了吗?

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

36
推荐指数
4
解决办法
2万
查看次数

GCC 4.8中的<stdatomic.h>?

我想利用C11标准提供的新原子操作.但是,尝试#include使用适当的头文件可以为我提供:

 csort-par.c:5:23: fatal error: stdatomic.h: No such file or directory
 #include <stdatomic.h>
Run Code Online (Sandbox Code Playgroud)

在文档http://gcc.gnu.org/wiki/C11Status似乎是说,头文件已经提供自GCC 4.7 ...我这么想吗?__STDC_NO_ATOMICS__没有定义.

gcc --version 如下:

gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
Run Code Online (Sandbox Code Playgroud)

我确认__STDC_NO_ATOMICS__没有定义如下:

#ifdef __STDC_NO_ATOMICS__
#error yes
#else
#error no
#endif
Run Code Online (Sandbox Code Playgroud)

收益率:

csort-par.c:10:2: error: #error no
 #error no
Run Code Online (Sandbox Code Playgroud)

编辑:感谢您的快速回复.

如果有人在谷歌遇到同样的问题而绊倒了这个问题,那么在此期间需要修复,直到他们发布GCC 4.9:

UNIX便携式原子操作

c multithreading gcc atomic c11

19
推荐指数
1
解决办法
2万
查看次数

在Intellij下使用Groovy测试Java代码:无法解析类GroovyTestCase

我需要为一些Java代码编写一个简短的测试.我使用CTRL + SHIFT + T生成一个IntelliJ,并选择"Groovy JUnit"作为测试库,然后编写以下测试:

package util
class FibonacciHeapTest extends GroovyTestCase {
    FibonacciHeap<Integer> heap

    void setUp() {
        super.setUp()
        heap = new FibonacciHeap<>()
    }

    void testAddInOrder() {
        testForItems 1..1000
    }


    private void testForItems(Range<Integer> items) {
        items.each {heap << it}
        assertEquals heap.size, items.to
        items.each {assertEquals heap.remove(), it}
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我在项目窗口中右键单击测试用例时,我没有得到通常用JUnit测试执行的"运行所有测试"选项,并且编译器抛出以下错误:

Information:2/4/15 8:15 PM - Compilation completed with 2 errors and 0 warnings in 2 sec
/home/patrick/IdeaProjects/hackerrank/src/test/java/util/FibonacciHeapTest.groovy
Error:(3, 1) Groovyc: unable to resolve class util.FibonacciHeap
Error:(9, 1) Groovyc: unable to resolve class …
Run Code Online (Sandbox Code Playgroud)

java groovy junit intellij-idea

15
推荐指数
2
解决办法
3万
查看次数

"代码太大" - 如何制作一个庞大的编译查找表?

我是在一个编程竞赛的最后一个周末(资格赛一轮的ICPC),我试图做的是有关(其中包括)分解整数范围内的问题,0 <= i <= 1,000,000为素数.

我的第一个想法是"哦不,因为整数是在NP,我们需要找到一种方法来避免花时间在它上面." 我们在Java工作.作为主要是一个C程序员,我的第一反应是用一个脚本来预先计算所有的素数高达1,000,000,其格式与Java数组,并试图将其插入到我的代码.我的理由是它节省了我们在定时部分运行类似于Eratosthenes筛子的时间,通过类似n的因子减少时间复杂度,并通过它轻而易举.

然后我被"代码太大"错误命中,我的几十万个int数组被编译器拒绝了.由于竞争规则,无法将其读入文件,或将其存储在除包含具有main方法的类的.java文件之外的任何位置.

我尝试将它分解成类似100,000 int块的东西,但是因为它仍然太大而无法工作(除了Java 7文档之外我们没有任何东西可以查阅,而且我无法找到任何关于"代码太大"的内容错误信息).我们最终放弃了,尝试了另一种方法,并让它运作起来,但它最终耗费了我们总比赛时间的四分之一,并且显着损害了我们的分数.

所以,我的问题是:有什么理智的方法来解决这个问题与查找表?是不是不可能在Java程序中获得一个巨大的预编译查找表?

我也很好奇这种语言限制背后的原因......它是一种安全的东西,不知何故?为什么编译器会限制方法的字节码大小?

java performance

9
推荐指数
0
解决办法
187
查看次数

如何阻止IntelliJ将参数放在自己的行上?

我刚刚写了这一行:

HDF5CompoundDSBridgeBuilder<WritableDataPoint> actualBridgeBuilder = new HDF5CompoundDSBridgeBuilder<>(actualReader);
Run Code Online (Sandbox Code Playgroud)

并且自动重新格式化器给了我:

HDF5CompoundDSBridgeBuilder<WritableDataPoint> actualBridgeBuilder = new HDF5CompoundDSBridgeBuilder<>
                (actualReader);
Run Code Online (Sandbox Code Playgroud)

我觉得这看起来很奇怪,我想告诉IntelliJ永远不要把参数放在他们自己的行上.我想要:

HDF5CompoundDSBridgeBuilder<WritableDataPoint> actualBridgeBuilder = new HDF5CompoundDSBridgeBuilder<>(
                actualReader);
Run Code Online (Sandbox Code Playgroud)

或者更好的是:

HDF5CompoundDSBridgeBuilder<WritableDataPoint> actualBridgeBuilder = 
       new HDF5CompoundDSBridgeBuilder<>(actualReader);
Run Code Online (Sandbox Code Playgroud)

我正在查看Code Style> Java> Wrapping and Braces下的项目设置,但我不确定应该更改哪个选项.我不想总是在'('之后总是有一个新行.我只是想确保IntelliJ在打破多行语句时永远不会打破它.我没有看到任何其他选项我可以改变.

可以这样做吗?

编辑:如果有人想测试他们自己的IntelliJ,我的边距设置为120个字符,确切的行(具有正确的空白量--8个空格)是:

        HDF5CompoundDSBridgeBuilder<WritableDataPoint> actualBridgeBuilder = new HDF5CompoundDSBridgeBuilder<>(actualReader)
Run Code Online (Sandbox Code Playgroud)

java ide intellij-idea

9
推荐指数
1
解决办法
3124
查看次数

自定义引导加载程序问题

我正在尝试为Hobby OS编写一个引导加载程序并让它运行良好.没什么特别的,只打印一行文字:

BITS 16
ORG 0

start: jmp main


OEM         db "Test OS "           
BytesPerSector:     DW 512
SectorsPerCluster:  DB 1
ReservedSectors:    DW 1
NumberOfFATs:   DB 2
RootEntries:    DW 224
TotalSectors:   DW 2880
Media:      DB 0xf8  
SectorsPerFAT:  DW 9
SectorsPerTrack:    DW 18
HeadsPerCylinder:   DW 2
HiddenSectors:  DD 0
TotalSectorsBig:    DD 0
DriveNumber:        DB 0
Unused:         DB 0
ExtBootSignature:   DB 0x29
SerialNumber:   DD 0xa0a1a2a3
VolumeLabel:    DB "HOBBY  OS  "
FileSystem:         DB "FAT12   "



main:
    ;Adjust code Seg.
    cli
    mov ax, 0x07c0
    mov …
Run Code Online (Sandbox Code Playgroud)

x86 assembly disk utility bootloader

8
推荐指数
1
解决办法
422
查看次数

元组vs Python中模块级常量的列表?

在Python中使用元组而不是模块级常量迭代列表是不错的样式?例如,我在我的文件顶部有一个重要字符串列表,我需要在输入中查找:

IMPORTANT_STRINGS = [
  "Hello world!",
  "Goodbye world!",
  "Foo...",
  # etc --- there are about 40 entries
]
Run Code Online (Sandbox Code Playgroud)

IMPORTANT_STRINGS 我的程序运行时永远不会被修改.

一方面,我认为不变性是好的,我应该尽可能地选择不可变数据结构,所以我应该使用元组代替.

另一方面,我认为元组不仅仅是不可变的列表:它们用于异性集合,当你传递诸如pair,triples等的东西时应该使用它们 - 大小很重要的固定大小的东西他们是什么.我也不认为我曾经在野外看过使用元组这样的常量的Python代码,我觉得看起来很奇怪:

IMPORTANT_STRINGS = (
   "Hello world!",
   etc
 )
Run Code Online (Sandbox Code Playgroud)

python coding-style tuples list immutability

8
推荐指数
2
解决办法
1510
查看次数

Java 8中的操作员的便捷功能?

在Python中,如果我想对xor操作进行折叠,我可以写:

reduce(operator.xor, my_things, 0)
Run Code Online (Sandbox Code Playgroud)

而不是更麻烦

reduce(lambda x, y: x^y, my_things, 0)
Run Code Online (Sandbox Code Playgroud)

在新的Java 8功能特性中是否有类似的东西?例如写这样的东西

myThings.reduce(0, Integer::xor)
Run Code Online (Sandbox Code Playgroud)

而不是

myThings.reduce(0, (x, y) -> x ^ y)
Run Code Online (Sandbox Code Playgroud)

java functional-programming java-8

7
推荐指数
1
解决办法
249
查看次数

CircleCI对非0退出代码做了什么?

这似乎很基本,但我无法在文档中的任何地方找到它.我正在开发一个项目,我们通过shell脚本包装器运行一些测试:

./foo.sh a 
./foo.sh b
./foo.sh c
Run Code Online (Sandbox Code Playgroud)

foo.sh不输出XUnit格式,因此我们需要一种不同的方式来向CircleCI发出故障信号.是exit 1(或任何非零退出代码)被识别为失败?什么条件导致CircleCI报告步骤失败?

shell continuous-integration exit-code circleci

7
推荐指数
1
解决办法
2456
查看次数

树上的高效平等函数

几天前,我收到了以下面试问题。它是用标准 ML 代码描述的,但我可以用我选择的语言自由回答(我选择了 Python):

我有一个类型:

datatype t 
  = Leaf of int
  | Node of (t * t)
Run Code Online (Sandbox Code Playgroud)

f和一个带有签名的函数

val f: int -> t
Run Code Online (Sandbox Code Playgroud)

您需要编写一个函数equals来检查两棵树是否相等。fO(n),对于函数的时间复杂度来说,它做了“最糟糕的事情” equals。写成 equals这样,它永远不会对 的n参数 呈 指数关系f

f提供的示例是:

fun f n = 
  if n = 0 then 
    Leaf(0)
  else 
    let 
      val subtree = f (n - 1) 
    in
      Node (subtree, subtree)
    end
Run Code Online (Sandbox Code Playgroud)

它会及时生成一个指数级大的树O(n),因此equals (f(n), f(n))对于简单的equals实现来说,与树的节点数呈线性关系的是O(2^n) …

python algorithm tree sml time-complexity

5
推荐指数
1
解决办法
330
查看次数