我正在包装大量的C++函数,如果底层套接字连接丢失,可能引发异常.虽然我已经知道如何来包装我的"获取连接"功能重新建立连接和/或尝试在列表中的其他可用的服务器,我不能想出一个解决方案来创建一个try..except包装提供给80 + C++函数.
#-- client.pxd ---
cdef extern from "rpc/RpcService.h":
cdef cppclass RpcServiceClient:
void getProject(ProjectT&, Guid& id) nogil except +
cdef extern from "client.h":
cdef cppclass Client:
RpcServiceClient proxy() nogil
cdef Client* getClient() nogil except +
#-- module.pxd ---
cdef inline Client* conn() except *:
# wrap getClient() here with try..except if the
# connection was never established
cpdef inline get_project(Guid& guid):
cdef:
ProjectT projT # cpp object
Project project # cdef python class
# this would catch fine in …
Run Code Online (Sandbox Code Playgroud) 我7年多来一直是一名python程序员,并且已经使用PyQt设计了3年多......但我不是一个经典训练的Comp Sci.重大的.最近,我一直在学习Go并积极关注Golang-nuts讨论列表,该列表充满了非常聪明的开发人员.从这个讨论组中,我看到了许多对软件设计模式的引用,例如Observer,Reactor等.再次因为我不是CS专业,我从未真正学过所有这些术语和理论,但它让我想知道.. .
Qt,wx,GTK等常见GUI框架有哪些设计模式?
我感觉它是不同组件的混合模式,例如事件循环与信号/槽或绑定与键值观察等等.我很想听听有关这些软件模式如何映射到这些框架的传统组件的解释或概括.
作为这个问题的一个次要元素:是否有GUI框架试图采用完全不同的模式方法来实现GUI解决方案?Cocoa/objective-c是否使用与其他事件相同的事件循环模式?
更新
为了帮助缩小我的问题的重点,并根据@HDDimon的答案,我主要想知道行为模式(沟通):http:
//en.wikipedia.org/wiki/Design_Patterns#Behavioral_patterns
我曾经问过另一个问题,这个问题对于直接答案来说有点过于复杂,所以我把它归结为这个基本问题......
当我aModule.so
使用标准的cython distutils 构建我时,它似乎与以下内容无关libpython
:
$ otool -L aModule.so
aModule.so:
/usr/local/lib/libboost_thread-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/local/opt/thrift/lib/libthrift-0.9.0.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)
Run Code Online (Sandbox Code Playgroud)
但是当我使用cmake设置构建时,它会不断生成链接libpython
到.so 的链接器命令:
$ otool -L aModule.so
aModule.so:
/System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.1)
/usr/local/opt/thrift/lib/libthrift-0.9.0.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/local/lib/libboost_thread-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
/usr/lib/libSystem.B.dylib (compatibility …
Run Code Online (Sandbox Code Playgroud) 我一直在将现有项目从使用Glide的 vendored依赖项转换为使用Go 1.11.x 模块支持.但我在一个项目中使用我无法解决的模块遇到特定情况.
内部项目'foo'通过"go mod vendor"销售其依赖项:
projects/src/foo/
main.go
vendor/
...
Run Code Online (Sandbox Code Playgroud)
这在内部构建项目时非常有用,因为非开发人员可以将项目克隆到任何位置并构建它,而不需要外部代理访问来下载依赖项.
现在我试图让项目'bar'使用库'foo'构建一个工具.
package bar
import "internal.com/project/foo"
Run Code Online (Sandbox Code Playgroud)
"go.mod"文件仅包含:
module internal.com/project/bar
require internal.com/project/foo v0.0.0-...
Run Code Online (Sandbox Code Playgroud)
我会供应商通过:
go module vendor
Run Code Online (Sandbox Code Playgroud)
我通过以下方式构建:
go build -mod=vendor
Run Code Online (Sandbox Code Playgroud)
我所看到的是'foo'将从内部git repo克隆,并且它的所有依赖项将从它们的远程git起源下载,并且我的'go.sum'文件将使用所有瞬态依赖项进行更新.但我真正想要的只是从我的内部网络中获取'foo'并让它平整销售的依赖关系.理想情况下,应该没有外部http请求.
这甚至可能吗?直接构建项目"foo"时,"-mod = vendor"标志非常有用.但它似乎并不适用于此,因为项目"bar"不希望供应商.它希望获得一个主要的依赖关系,就是这样.似乎Go模块支持并不关心扁平化出售的瞬态依赖性.
以前当glide
用作包管理器时,它会从内部git repo中获取'foo',然后将其所有依赖项展平到我的vendor目录中.
最初发布的问题是golang-nuts,没有回复.
我的软件有问题.在我的钢琴软件中,如果我一直按下键盘上的一个键,那么它会使该特定键重复多次相同的音调.但实际上我需要一个单一的音调,直到该特定键的释放.我提供了一部分代码来检测keyPress事件并调用相应的方法.那么我应该对我的代码进行哪些更改?
def keyPressEvent(self, event):
if type(event) == QtGui.QKeyEvent and event.key() == QtCore.Qt.Key_A :
self.Playnote('/home/hemanth/hemanth/Piano/C.mp3')
self.ui.pushButton.animateClick(100)
if type(event) == QtGui.QKeyEvent and event.key() == QtCore.Qt.Key_S:
self.Playnote('/home/hemanth/hemanth/Piano/D.mp3')
self.ui.pushButton_2.animateClick(100)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用龙卷风和pil和mongodb这样做.
avat = self.request.files['avatar'][0]["body"]
nomfich = self.request.files['avatar'][0]["filename"]
try:
image = Image.open(StringIO.StringIO(buf=avat))
size = image.size
type = image.format
avatar = r"/profile-images/{0}/{1}".format(pseudo, nomfich)
except IOError:
self.redirect("/erreur-im")
Run Code Online (Sandbox Code Playgroud)
和数据库代码:
user={
"pseudo": pseudo,
"password":password,
"email":email,
"tel":tel,
"commune":commune,
"statut":statut,
"nom":nom,
"prenom":prenom,
"daten":daten,
"sexe":sexe,
"avatar":avatar
}
self.db.essog.insert(user)
Run Code Online (Sandbox Code Playgroud)
并且它工作正常,"头像"被保存,但没有图像,它只保存一个名字!
我的问题是:
我遇到了一个C++习惯,我试图研究它以了解它的影响并验证它的用法.但我似乎无法找到确切的答案.
std::vector< Thing > getThings();
void do() {
const std::vector< Thing > &things = getThings();
}
Run Code Online (Sandbox Code Playgroud)
这里我们有一些返回非const&
值的函数.我看到的习惯是在const&
从函数中分配返回值时使用左值.提出这种习惯的推理是它减少了副本.
现在我一直在研究RVO(返回值优化),复制省略和C++ 11移动语义.我意识到,无论在何处使用,给定的编译器都可以选择通过RVO来防止复制const&
.但是,在防止复制方面,const&
左值的使用是否会对非const&
返回值产生任何影响?在移动语义之前,我特别询问了前C++ 11编译器.
我的假设是编译器实现RVO或不实现RVO,并且说左值应该const&
不提示或强制无副本情况.
编辑
我特别询问const&
这里的用法是否减少了副本,而不是临时对象的生命周期,如"最重要的const"所述
进一步澄清问题
这是:
const std::vector< Thing > &things = getThings();
Run Code Online (Sandbox Code Playgroud)
与此不同的是:
std::vector< Thing > things = getThings();
Run Code Online (Sandbox Code Playgroud)
在减少副本方面?或者它对编译器是否可以减少副本(例如通过RVO)没有任何影响?
问题
I的具体实例的int范围为1-100.我希望生成此范围内的n个总数尽可能均匀分布,并包含第一个和最后一个值.
例
start = 1, end = 100, n = 5
Output: [1, 25, 50, 75, 100]
start = 1, end = 100, n = 4
Output: [1, 33, 66, 100]
start = 1, end = 100, n = 2
Output: [1, 100]
Run Code Online (Sandbox Code Playgroud)
我现在有
什么实际上有一个工作方法,但我一直觉得我在想这个,错过了一些更简单的东西?这是最有效的方法还是可以改进?
def steps(start, end, n):
n = min(end, max(n, 2) - 1)
mult = end / float(n)
yield start
for scale in xrange(1, n+1):
val = int(mult * scale)
if val …
Run Code Online (Sandbox Code Playgroud) 我正在努力实现拖放工作.我希望能够从QPushButton拖放到QTableView的单元格中.我在线查看了一些教程,但似乎第一步陷入困境.下面的例子中,从惊人zetcode教程改变: http://zetcode.com/tutorials/pyqt4/dragdrop/
使用下面的代码,当我将按钮拖动到tableWidget的dragEnterEvent似乎被调用,但是一旦我将鼠标悬停在桌子上,我得到我不能砸在桌子上那个符号,所以绝不能去掉事件:(
我不得不承认我对pyqt很新,所以可能会遗漏一些非常简单的东西.非常感谢我能得到的任何帮助!干杯戴夫
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
class Button(QtGui.QPushButton):
def __init__(self, title, parent):
super(Button, self).__init__(title, parent)
def mouseMoveEvent(self, e):
if e.buttons() != QtCore.Qt.RightButton:
return
mimeData = QtCore.QMimeData()
drag = QtGui.QDrag(self)
drag.setMimeData(mimeData)
drag.setHotSpot(e.pos() - self.rect().topLeft())
dropAction = drag.start(QtCore.Qt.MoveAction)
def mousePressEvent(self, e):
QtGui.QPushButton.mousePressEvent(self, e)
if e.button() == QtCore.Qt.LeftButton:
print 'press'
class MyTable(QtGui.QTableWidget):
def __init__(self, rows, columns, parent):
super(MyTable, self).__init__(rows, columns, parent)
self.setAcceptDrops(True)
def dragEnterEvent(self, e):
print e.accept()
def dropEvent(self, e):
print 'blah'
position = e.pos() …
Run Code Online (Sandbox Code Playgroud) 例如,我有一个这样的模型:
class Wheel(models.Model):
wheel = models.CharField(max_length=20)
class Vehicle(models.Model):
wheel = models.ForeignKey(Wheel)
Run Code Online (Sandbox Code Playgroud)
当我制作一辆新车时,我希望绿色加号出现在我的车轮区域旁边,并允许我添加新的车轮实例.我对django很新,所以我不知道是否可能.任何帮助表示赞赏!