我想从Python应用程序中调用C库.我不想包装整个API,只包含与我的案例相关的函数和数据类型.在我看来,我有三个选择:
我不确定2)或3)是否是更好的选择.3)的优点是它ctypes
是标准库的一部分,结果代码将是纯Python - 尽管我不确定这个优势实际上有多大.
两种选择都有更多优点/缺点吗?你推荐哪种方法?
编辑:感谢您的所有答案,他们为希望做类似事情的人提供了一个很好的资源.当然,这个决定仍然是针对单个案例做出的 - 没有人"这是正确的事情"的答案.对于我自己的情况,我可能会选择ctypes,但我也期待在其他项目中尝试Cython.
由于没有一个真正的答案,接受一个有点武断; 我选择了FogleBird的答案,因为它提供了对ctypes的一些很好的洞察力,它目前也是最高投票的答案.但是,我建议阅读所有答案以获得良好的概述.
再次感谢.
我正在编写一个GUI应用程序,它定期通过Web连接检索数据.由于此检索需要一段时间,因此会导致UI在检索过程中无响应(无法将其拆分为较小的部分).这就是为什么我想将Web连接外包给一个单独的工作线程.
[是的,我知道,现在我有两个问题.]
无论如何,应用程序使用PyQt4,所以我想知道更好的选择是什么:使用Qt的线程还是使用Python threading
模块?每个的优点/缺点是什么?或者你有一个完全不同的建议?
编辑(重新赏金):虽然在我的特定情况下的解决方案可能会使用像Jeff Ober和LukášLalinský建议的非阻塞网络请求(所以基本上将并发问题留给网络实现),我仍然喜欢更多对一般问题的深入回答:
使用PyQt4(即Qt)线程优于本机Python线程(来自threading
模块)的优点和缺点是什么?
编辑2:谢谢大家的答案.虽然没有100%的协议,但似乎普遍认为答案是"使用Qt",因为它的优点是与库的其余部分集成,同时没有造成任何真正的缺点.
对于任何想要在两个线程实现之间进行选择的人,我强烈建议他们阅读这里提供的所有答案,包括abbot链接到的PyQt邮件列表线程.
我考虑了赏金的几个答案; 最后,我选择了abbot作为非常相关的外部参考; 然而,这是一个近距离的电话.
再次感谢.
2009年即将结束,随着经济和所有,我们将节省我们的钱,而不是购买昂贵的烟花,我们将在今年的ASCII艺术庆祝.
给定一组烟花和时间,在那个时刻拍摄烟花的照片并将其绘制到控制台.
在新年前夜(UTC)午夜之前输入的最佳解决方案将获得500代表的赏金.这是代码高尔夫,因此字符数量很大; 然而,社区投票也是如此,我保留最佳/最酷/最有创意/等等的最终决定.
请注意,我们的坐标系是从左到右,从下到上,所以所有的烟花都是在y
-coordinate为0(零)时启动的.
输入数据由表单的烟花组成
(x, speed_x, speed_y, launch_time, detonation_time)
Run Code Online (Sandbox Code Playgroud)
哪里
x
是烟花发射的位置(列),speed_x
并且speed_y
是发射时烟花的水平和垂直速度,launch_time
是这个烟花发射的时间点,detonation_time
是这个烟花爆炸的时间点.烟花数据可以在您的程序中硬编码为5元组(或您的语言中的等效元素)列表,不计入您的字符数.但是,必须很容易更改此数据.
您可以做出以下假设:
-20 <= x <= 820
-20 <= speed_x <= 20
0 < speed_y <= 20
launch_time >= 0
launch_time < detonation_time < launch_time + 50
单个附加输入数据是应该呈现的时间点.这是一个非负整数,通过标准输入或命令行参数(无论您选择哪个)给出.
这个想法是(假设您的程序是一个名为python的脚本firework.py
),这个bash脚本为您提供了一个漂亮的烟火动画:
#!/bin/bash
I=0
while (( 1 )) ; do
python firework.py $I
I=$(( $I + 1 ))
done
Run Code Online (Sandbox Code Playgroud)
(随意把等效的.BAT文件放在这里).
烟花的生命如下:
我有一个由外部库提供给我的课程.我已经创建了这个类的子类.我也有一个原始类的实例.
我现在想要将此实例转换为我的子类的实例,而不更改实例已有的任何属性(除了我的子类覆盖的那些属性).
以下解决方案似乎有效.
# This class comes from an external library. I don't (want) to control
# it, and I want to be open to changes that get made to the class
# by the library provider.
class Programmer(object):
def __init__(self,name):
self._name = name
def greet(self):
print "Hi, my name is %s." % self._name
def hard_work(self):
print "The garbage collector will take care of everything."
# This is my subclass.
class C_Programmer(Programmer):
def __init__(self, *args, **kwargs):
super(C_Programmer,self).__init__(*args, **kwargs)
self.learn_C()
def …
Run Code Online (Sandbox Code Playgroud) 这是关于提供图像的Web应用程序.由于相同的请求将始终返回相同的图像,我希望访问的浏览器尽可能积极地缓存图像.我非常想告诉浏览器
这是你的形象.继续保持它; 在接下来的几天里,它真的不会改变.无需再回来.真.我承诺.
到目前为止,我确实做到了
Cache-Control: public, max-age=86400 Last-Modified: (some time ago) Expires: (two days from now)
当然,304 not modified
如果请求具有适当的If-Modified-Since
标题,则返回a .
有什么我可以做的(或者我应该采取不同的做法)将我的信息传递给浏览器吗?
该应用程序托管在Google App Engine上,以防万一.
我正在尝试开发一个小应用程序.在其中,我需要检测UIView中像素的颜色.我有一个CGPoint定义我需要的像素.使用CoreAnimation更改UIView的颜色.
我知道有一些复杂的方法可以从UIImages中提取颜色信息.但是我找不到UIViews的解决方案.
在伪代码我正在寻找类似的东西
pixel = [view getPixelAtPoint:myPoint];
UIColor *mycolor = [pixel getColor];
Run Code Online (Sandbox Code Playgroud)
任何输入都非常感谢.
我为Emacs安装了自动完成模式.
第一:当我输入声明时,我得到了正常的自动完成行为:
所以我点击Tab完成 - 没问题.但后来我点击;:
它立刻试图完成一些事情!我不能打,Enter因为那会接受错误的完成!
所以我必须打C-j.太痛苦了.
第二:一旦我完成了声明,我输入}:
...但除非我打字,否则它不会缩进Tab.
是什么赋予了?
更新,设置:
我正在使用Emacs 23.我的css-electric-keys
是}
和;
.我的自动完成配置如下:
(ac-config-default)
(setq ac-auto-start t)
(setq ac-delay 0.1)
(setq ac-auto-show-menu nil)
(setq ac-show-menu-immediately-on-auto-complete t)
(setq ac-trigger-key nil)
Run Code Online (Sandbox Code Playgroud) 如果FirstActivity
是任务的根,并完成自身的推出SecondActivity
,然后调用isTaskRoot()
中SecondActivity
立即返回false
,因为FirstActivity
的整理异步发生,因而还没有完成.等待一秒然后调用isTaskRoot()
返回true.
public class FirstActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finish();
startActivity(new Intent(this, SecondActivity.class));
}
}
Run Code Online (Sandbox Code Playgroud)
public class SecondActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected void onResume() {
super.onResume();
((TextView)findViewById(R.id.tv1))
.setText("isTaskRoot() in onResume(): " + isTaskRoot());
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
((TextView)findViewById(R.id.tv2))
.setText("isTaskRoot() after 1s: " + isTaskRoot());
} …
Run Code Online (Sandbox Code Playgroud) 假设我正在运行一个显示有趣猫图片的网站.我有一个名为表CatPictures
与列Filename
,Awesomeness
以及DeletionDate
和以下指标:
create nonclustered index CatsByAwesomeness
on CatPictures (Awesomeness)
include (Filename)
where DeletionDate is null
Run Code Online (Sandbox Code Playgroud)
我的主要问题是:
select Filename from CatPictures where DeletionDate is null and Awesomeness > 10
Run Code Online (Sandbox Code Playgroud)
作为一个人,我知道上面的索引是SQL Server所需要的,因为索引过滤条件已经确保了该DeletionDate is null
部分.
但是SQL Server不知道这个; 我的查询的执行计划将不使用我的索引:
即使添加索引提示,它仍将DeletionDate
通过查看实际的表数据进行显式检查:
(并且还抱怨缺少的索引DeletionDate
).
我当然可以
include (Filename, DeletionDate)
Run Code Online (Sandbox Code Playgroud)
相反,它会工作:
但是包含该列似乎是浪费,因为这只会占用空间而不添加任何新信息.
有没有办法让SQL Server意识到过滤条件已经在检查工作DeletionDate
?
我想知道在C#中是否存在类似于AS3的Function类型.我想做这样的somnthing(但在C#中):
private function doSomething():void {
// statements
}
var f:Function = doSomething
f()
Run Code Online (Sandbox Code Playgroud)