例如,在Ubuntu中,您可以使用Super-M来反转屏幕颜色(需要桌面效果,请参阅[1]).其他操作系统具有相似的能力,虽然我并不真正关心Linux以外的任何其他操作系统.
如果我想编写一个简单的程序,在运行时会反转屏幕颜色,我应该查看哪个API?
我使用API的语言对我来说并不特别重要.我对C/C++/Bash/Perl/Python非常熟悉,我可以用任何最容易访问此API的语言来解决这个问题.需要在Ubuntu上工作,处理其他类似的*nixes并不是非常重要.
[1] https://help.ubuntu.com/community/KeyboardShortcuts#Desktop%20Effects%20enabled%20shortcuts
我知道这听起来像是以前被问过的问题,但是等等,我会解释为什么其他选项不起作用。
我目前正在使用multiprocessing.Pool在应用程序中实现并行性,并希望扩展它以能够利用嵌套并行性。Pool仅将对象作为参数传递的天真的方法apply_async不起作用,如其他答案中所述,因为Pool无法进行腌制。
这是我的要求:
我需要某种池来限制并发执行任务的数量。例如,multiprocess.Pool用于此目的,但它不能传递给其他进程。
我需要嵌套并行性。在我的应用程序中,我需要执行 I/O 来识别嵌套工作是什么,所以我绝对不想从单个线程执行此操作。我认为这排除了这个问题的所有答案。
它需要在标准库中;我无法添加依赖项。这就排除了这个答案。
我真的很希望它能够与 Python 2 和 3 一起使用。但是,如果可以证明迁移到 Python 3 可以解决我的问题,我会考虑它。
我不需要专门使用多个进程,使用线程就可以了,因为大部分工作是 I/O 或等待子进程完成。
我尝试过使用multiprocessing.dummy,它是相同的接口,但在threading. 但是,当我尝试调用get()以检索测试结果时,我收到以下错误,所以我认为这已经结束了。
File "/usr/lib/python2.7/multiprocessing/pool.py", line 567, in get
raise self._value
ValueError: signal only works in main thread
Run Code Online (Sandbox Code Playgroud)
我知道concurrent.futuresPython 3 中的库,但这似乎有一些严重的限制。例如,本节中的第二个示例在我的例子中似乎是一个阻碍:
https://docs.python.org/3/library/concurrent.futures.html#threadpoolexecutor
我不明白如何使用基本上任何直接编写的嵌套并行算法来避免遇到这个问题。因此,即使我愿意使用 Python 3,我也认为这是不可能的。
如果没有编写我自己的实现,我不知道标准库中是否有任何其他可用选项。
如果您想将静态库链接到共享库或可执行文件,同时保持所有符号可见(例如,您可以稍后打开它以找到它们),在 Linux/BSD 上执行此操作的一种非可移植方式是使用标志-Wl,--whole-archive. 在 macOS 上,等效标志是-Wl,-force_load,<library>; 在 Windows 上,它显然是/WHOLEARCHIVE.
在 CMake 中有一种可移植的方法来做到这一点吗?
我知道我可以添加链接器标志target_link_libraries。我可以检测到操作系统。但是,由于它的 macOS 版本在与标志相同的字符串中包含库名称(没有空格),我认为这与 CMake 对链接目标等的通常处理相混淆。我越是努力做到这一点,我就越需要向后弯腰才能让它发生。
这甚至没有涉及更不寻常的编译器,如 Intel、PGI、Cray、IBM 等。这些可能不是人们通常处理的编译器,但在某些领域,需要处理这些基本上是不可避免的。
有没有更好的选择?
我想从vanilla MSYS环境下载脚本.
在Linux上,我会这样做
wget <url>
Run Code Online (Sandbox Code Playgroud)
在Mac OS X上,我会这样做
curl -O <url>
Run Code Online (Sandbox Code Playgroud)
不幸的是,这些替代方案似乎都没有在MSYS的默认安装中可用.我也尝试LPW::Simple在Perl中使用该模块,但默认情况下似乎也没有安装.
是否有可用于实现此目的的默认MSYS环境附带的工具?
我总是可以告诉最终用户自己下载文件,但是这样做的目的就是让所有东西"正常工作",只需要安装额外的软件.
如何编写在Mac上运行的脚本以反转屏幕颜色?
类似于如何在Linux中以编程方式反转屏幕颜色,但遗憾的是xcalib可以在Windows和Linux上运行,但据我所知,不适用于Mac.
编辑:我有一个部分解决方案.在翻转屏幕颜色之前和之后,我找到了转储所有设置的方法:
$ mkdir before && mkdir after && cd before
$ for d in $(defaults domains | sed 's/,//g'); do defaults read $d > $d; done
$ cd ../after
$ # System Preferences > Universal Access > Display > White on Black
$ for d in $(defaults domains | sed 's/,//g'); do defaults read $d > $d; done
$ diff -r before after
diff -r before/com.apple.CoreGraphics after/com.apple.CoreGraphics
3c3
< DisplayUseInvertedPolarity = 0;
---
> …Run Code Online (Sandbox Code Playgroud) 我使用Python的内置集来保存我定义的类的对象.对于这个类,我定义的__eq__,__ne__和__hash__这样我可以通过我的定义比较功能比较的对象.这工作得很好,直到我发现我确实需要2套对比功能,这将在不同的方式在不同的时间在我的代码中使用.
我不能__eq__在我的类中定义两组等方法,而Python的内置set类型不接受比较器参数.我想我可以围绕set编写一个包装类,但这似乎比必要的工作要多得多.
有没有比编写自己的set类更简单的解决方案?
我已经广泛研究了 TensorFlow 上的其他答案,但我似乎无法让它在我的 CPU 上使用多个内核。
根据 htop,以下程序仅使用单个 CPU 内核:
import tensorflow as tf
n_cpus = 20
sess = tf.Session(config=tf.ConfigProto(
device_count={ "CPU": n_cpus },
inter_op_parallelism_threads=n_cpus,
intra_op_parallelism_threads=1,
))
size = 100000
A = tf.ones([size, size], name="A")
B = tf.ones([size, size], name="B")
C = tf.ones([size, size], name="C")
with tf.device("/cpu:0"):
x = tf.matmul(A, B)
with tf.device("/cpu:1"):
y = tf.matmul(A, C)
sess.run([x, y])
# run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
# run_metadata = tf.RunMetadata()
# sess.run([x, y], options=run_options, run_metadata=run_metadata)
# for device in run_metadata.step_stats.dev_stats:
# device_name = device.device …Run Code Online (Sandbox Code Playgroud) python parallel-processing multithreading affinity tensorflow
的%fprintf格式代码被指定为上式的值操作double[ 源.但是,一个简单的测试程序表明它也可以与类型的值一起使用float.这是如何运作的?
具有整数类型(例如int和long long int)的等效情况"起作用",因为在小端机器上,32位整数的低位字节恰好与64位整数的低位字节重叠,所以只要高位为0,你会得到"正确"的答案.
但是,这不可能是对的情况下float和double,因为浮点格式都没有这样的互换.如果没有将(相当复杂的)转换为其他格式,您根本无法将浮点值打印为double.通过类型惩罚尝试这样做只会打印垃圾.
最重要的是,printf是可变的.编译器在编译时不一定知道将使用什么格式说明符,只知道参数的类型.因此,我唯一可以推测的是,传递给可变函数的所有 float值都将double无条件地升级到.但令我难以置信的是,我可以用C语言编程很长时间而且不知道这一点.
C如何在这里进行隐式强制?
资源:
#include <stdio.h>
#include <math.h>
int main() {
float x[2] = {M_PI, 0.0};
printf("value of x: %.16e\n", x[0]);
printf("size of x: %lu\n", sizeof(x[0]));
double *xp = (double *)&x[0];
printf("value of *xp: %.16e\n", *xp);
printf("size of *xp: %lu\n", sizeof(*xp));
double y = M_PI;
printf("value of y: %.16e\n", y);
printf("size of y: …Run Code Online (Sandbox Code Playgroud)