我在Windows Vista上运行带有PyDev和Python 3.2的Eclipse,并且正在学习Python和ctypes的教程.
但是,我发现当我调用msvcrt.printf()来打印字符串时,在显示所有其他打印语句之前,这不会显示在Eclipse的控制台输出中.
这是我使用的确切代码:
from ctypes import *
msvcrt = cdll.msvcrt
message_string = "Hello Worlds!\n"
printf = msvcrt.printf
print(printf("Testing: %s".encode('ascii'),message_string.encode('ascii')))
print("foo")
print("why!?")
Run Code Online (Sandbox Code Playgroud)
这是输出:
23
foo
why!?
Testing: Hello Worlds!
Run Code Online (Sandbox Code Playgroud)
我在别处看到(对一般的)唯一的解释提到的printf是如何缓冲和显示之前需要一个换行符,但在字符串中换行,我还增加了一个直接的printf语句('的printf("测试:%s \n",......")并没有什么区别.
我想在Eclipse中工作,我不想每次想要测试脚本时都要继续打开命令提示符,那么有什么办法可以在控制台输出中修复这个顺序吗?为什么会发生这种情况?
CopyOnWriteArrayList 几乎具有我想要的行为,如果删除不必要的副本,它将正是我正在寻找的。特别是,它可以像 ArrayList 一样在 ArrayList 末尾进行添加 - 即,没有理由每次都创建一个新副本,这是非常浪费的。它实际上可以限制 ArrayList 的末尾来为读者捕获快照,并在添加新项目后更新末尾。
这种增强似乎是值得拥有的,因为对于许多应用程序来说,最常见的添加类型是添加到 ArrayList 的末尾 - 这甚至是选择使用 ArrayList 的一个原因。
也不会有额外的开销,因为它只能在附加时不复制,尽管它仍然需要检查是否需要重新调整大小,但 ArrayList 无论如何都必须这样做。
是否有任何替代实现或数据结构具有这种行为,而无需在末尾添加不必要的副本(即,线程安全且经过优化以允许频繁读取,而写入仅在列表末尾添加)?
如何提交更改请求以请求对 Java 规范进行更改,以消除在 CopyOnWriteArrayList 末尾添加的副本(除非需要重新调整大小)?
我真的很希望看到核心 Java 库对此进行更改,而不是维护和使用我自己的自定义代码。