这是我删除的非代码内容的精简版setup.py脚本:
#!/usr/bin/env python
from distutils.core import setup
from whyteboard.misc import meta
setup(
name = 'Whyteboard',
version = meta.version,
packages = ['whyteboard', 'whyteboard.gui', 'whyteboard.lib', 'whyteboard.lib.pubsub',
'whyteboard.lib.pubsub.core', 'whyteboard.lib.pubsub.utils', 'whyteboard.misc'],
py_modules = ['whyteboard'],
scripts = ['whyteboard.py'],
)
Run Code Online (Sandbox Code Playgroud)
MANIFEST.in:
include *.txt
include whyteboard-help/*.*
recursive-include locale *.mo
recursive-include images *.png
Run Code Online (Sandbox Code Playgroud)
当我运行"python setup.py install sdist"时,我得到一个很好的.tar.gz,带有"whyteboard-0.41"根文件夹,里面有我的locale/images /和whyteboard-help/folders.这也有我的whyteboard.py脚本,它从whyteboard源包中启动我的程序.
所以:
whyteboard/
??? locale/
??? images
??? whyteboard-help/
??? whyteboard/
? ??? __init__.py
? ??? other packages etc
??? whyteboard.py
??? README
??? setup.py
??? CHANGELOG
Run Code Online (Sandbox Code Playgroud)
这反映了我的程序的来源,一切应该是怎样的,并且是正确的.
但是,当我运行"python setup.py install"时,我的数据文件都没有写入 …
我最近改变了程序的目录布局:之前,我把所有模块放在"main"文件夹中.现在,我已将它们移动到以程序命名的目录中,并放置在__init__.py那里制作包.
现在我在我的主目录中有一个.py文件,用于启动我的程序,这个文件更整洁.
无论如何,尝试加载以前版本的程序中的pickle文件是失败的.我得到了,"ImportError:没有模块命名工具" - 我想这是因为我的模块以前在主文件夹中,现在它在whyteboard.tools中,而不仅仅是简单的工具.但是,在工具模块中导入的代码与它位于同一目录中,因此我怀疑是否需要指定包.
所以,我的程序目录看起来像这样:
whyteboard-0.39.4
-->whyteboard.py
-->README.txt
-->CHANGELOG.txt
---->whyteboard/
---->whyteboard/__init__.py
---->whyteboard/gui.py
---->whyteboard/tools.py
whyteboard.py从whyteboard/gui.py启动一个代码块,启动GUI.在目录重新组织之前,肯定没有发生这种酸洗问题.
我们有4台服务器负载均衡:
它们每个都有一个应用程序池,其中包含一个工作进程和一个网站.每个服务器都有自己的站点副本(DLL和视图),在本地磁盘上运行.我们使用IIS虚拟目录指向群集文件服务器上的共享以获取日志文件和常用图像等(仅限内容).应用程序池设置为在空闲时不关闭(间隔为0),并且我们也禁用了每1740分钟的循环间隔.
我们在所有服务器上安装了New Relic的.NET代理,通过我们的慢速事务日志,我可以看到许多请求需要15秒左右才能完成.展望跟踪,我可以看到一个共同的呼声System.Web.Compilation.AssemblyBuilder.Compile()和System.Web.Compilation.BuildManager.CompileWebFile().
据我所知或理解,ASP会在第一次请求时编译这些视图,并将其缓存(到C:\ Windows\Microsoft.Net中的临时ASP文件),然后从那里加载后续请求.
我很困惑这种情况经常发生 - 当我访问这些URL时,TTFB大约是400ms,由于持续加载,我看不到网站"丢失"他们的缓存并需要再次编译视图.这些页面经常被点击 - 它是一个电子商务商店,我可以看到它经常发生,并在我们最受欢迎的页面上:目录(类别/品牌/性别等)列表和产品详细信息.
我已针对每个应用程序池设置设置以在回收时记录事件,并且在我在事件查看器中检查WAS服务时未记录任何事件.我们还安装了New Relic服务器,并查看过去6小时的数据,我看不到任何服务器上的RAM使用量下降 - 这表明应用程序池的回收.这真让我困惑!
我正在考虑将我们的观点作为发布过程的一部分进行预编译 - 这真的很有道理.但感觉就是这种情况正在解决,或者掩盖一个我认为不应该发生的问题.我们在发布模式下构建我们的网站,并拥有<compilation debug="false" />所有web.config文件.
任何人都可以想到这个的原因吗?
我正在开发一个基于NopCommerce的项目,该项目使用ASP MVC,Autofac和Entity Framework.我在从MVC Route中调用服务上的方法时会发生异常,这将使用EF调用DB.
在开发期间,一切正常 - 但是在负载测试期间,当有并发用户时,1或2个请求将崩溃,并且以下错误之一将记录到ELMAH.
System.InvalidOperationException ExecuteReader需要一个开放且可用的连接.连接的当前状态是打开的.
System.InvalidOperationException ExecuteReader需要一个开放且可用的连接.连接的当前状态已关闭.
System.InvalidOperationException未关闭连接.连接的当前状态是连接.
System.ObjectDisposedException ObjectContext实例已被释放,不能再用于需要连接的操作.
System.ObjectDisposedException由于已释放DbContext,因此无法完成操作.
System.ArgumentException已添加具有相同键的项.
我通过打开网站上的许多链接,然后使用Chrome插件刷新所有标签,模拟同时点击网站的约25个请求来测试.
该服务有两个从路径内部调用的方法,然后这些相同方法中的一个可以从控制器动作调用50次以上.有时异常是从Route内部触发的,有时它来自控制器内部.意味着路径的GetRouteData已经完成,将'flow'传递给控制器,然后在那里失败.但是,大多数情况下,路由中会发生异常.当异常确实从控制器内部发生时,它位于异常发生的不同行.
有时一个方法会失败,另一个方法将运行正常,然后调用堆栈中的下一个方法失败.它每次都不同,但这些方法调用使用常用方法从数据库中检索.
在此之前注册的其他2个路由映射到*{ url},它们执行传入URL的数据库查找,并且异常从未发生过.因此,这种路由不是执行任何数据库工作的第一个操作.
该服务是依赖注册的: -
builder.RegisterControllers(typeFinder.GetAssemblies().ToArray());
builder.Register<IDbContext>(c => new NopObjectContext(DataSettings.DataConnectionString)).InstancePerLifetimeScope();
builder.RegisterGeneric(typeof(EfRepository<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope();
builder.RegisterType<MemoryCacheManager>().As<ICacheManager>().Named<ICacheManager>("nop_cache_static").SingleInstance();
builder.RegisterType<MyService>().As<IMySerivce>()
.WithParameter(ResolvedParameter.ForNamed<ICacheManager>("nop_cache_static"))
.InstancePerLifetimeScope();
Run Code Online (Sandbox Code Playgroud)
Controller通过构造函数注入接收服务: -
protected readonly IMyService _myService;
public MyController(IMyService myService)
{
_myService = myService;
}
Run Code Online (Sandbox Code Playgroud)
该路线解决了以下服务:
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var _myService = EngineContext.Current.Resolve<IMyService>();
myService.databaseOperation(); <--- falls over here w/ concurrency
}
Run Code Online (Sandbox Code Playgroud)
有没有想过为什么会出现这些错误?以及如何解决它们?
根据我的理解,我们的DBContext似乎是在2个请求中共享的,但是在我的依赖注册中,我告诉它要解析为生命周期得分 - 这应该是每个请求都是唯一的.我已经阅读了很多关于这个异常的原因,以及它是如何依赖于依赖注入框架来控制依赖关系的生命周期以及管理其资源的处理 - 事情就是这样,事情似乎正在崩溃.
关于服务本身,它的工作方式与应用程序中的所有其他服务一样 - 没有什么特别突出和不同的.
我已经粘贴了完整的异常堆栈跟踪 …
asp.net-mvc entity-framework dependency-injection autofac nopcommerce
我有自己的绘图程序,有各种"绘图工具",如钢笔,橡皮擦,矩形,圆形,选择,文本等.
它是用Python和wxPython制作的.上面提到的每个工具都是一个类,它们都有多态方法,例如left_down(),mouse_motion(),hit_test()等.程序管理所有绘制形状的列表 - 当用户绘制形状时,它被添加到列表.这也用于管理撤消/重做操作.
所以,我有一个不错的代码库,我可以将协作绘图挂钩.可以更改每个形状以了解其所有者 - 绘制它的用户,并且仅允许对一个人拥有的形状执行删除/移动/重新缩放操作.
我只是想知道开发这个的最好方法."会话"中的一个人将不得不充当服务器,我没有钱提供免费的中央服务器.不知何故,用户需要一种连接服务器的方式,这意味着某种"发现服务器"浏览器......或其他东西.如何广播对应用程序所做的更改?实时绘制并在每个鼠标运动事件上广播消息在性能方面将是昂贵的,并且在给定时间用户越多,事情就越糟糕.
任何想法都是受欢迎的,我不太确定从哪里开始开发这个(甚至如何测试它)
我正在写一个绘图程序,Whyteboard - http://code.google.com/p/whyteboard/
我已经实现了图像旋转功能,除了它的行为有点奇怪.我无法弄清楚使图像相对于鼠标位置旋转的正确逻辑
我的代码与此类似:
(这些是从鼠标事件处理程序调用的)
def resize(self, x, y, direction=None):
"""Rotate the image"""
self.angle += 1
if self.angle > 360:
self.angle = 0
self.rotate()
def rotate(self, angle=None):
"""Rotate the image (in radians), turn it back into a bitmap"""
rad = (2 * math.pi * self.angle) / 360
if angle:
rad = (2 * math.pi * angle) / 360
img = self.img.Rotate(rad, (0, 0))
Run Code Online (Sandbox Code Playgroud)
因此,当用户移动鼠标时,基本上旋转图像的角度会不断增加.但是,这有时意味着您必须多次"圈"鼠标才能将图像旋转90度,更不用说360度了.
但是,我需要它与其他程序类似 - 图像如何相对于鼠标在图像上的位置旋转.
这是我遇到麻烦的一点.我已经离开了与语言无关的问题,尽管使用Python和wxPython它可以适用于任何语言
如果我在模块的顶部放置任何打印语句,而不是在任何类/函数内部,则在通过鼻子运行测试时不会打印任何内容.
import os
print 'hi'
#----------------------------------------------------------------------
def make_shapes(canvas):
"""
Generates shapes. Needs a Canvas instance to add the shapes to
"""
params = [canvas, Colour(0, 0, 0), 1]
Run Code Online (Sandbox Code Playgroud)
尽管将打印放在函数内部.有任何想法吗?
我认为在我的应用程序(绘画类型程序)中撒一些调试日志记录并将此信息写入文件可能是有益的.我当前的调试策略是挂钩自定义异常监听器(sys.excepthook)并允许用户通过电子邮件发送导致崩溃的堆栈跟踪的副本.
这对于查看用户导致程序崩溃的行为非常方便,但我觉得日志文件肯定有帮助.我想知道最好的办法是什么.我正在考虑通过命令行开关启用日志记录,并为程序的每次"运行"创建日志,并在发生崩溃时通过电子邮件发送自己的日志副本.但是,如果应用程序未处于调试模式,则日志将无法帮助!
我有点担心日志填满太快 - 如果我将记录放在一些鼠标运动事件处理程序中,那么它将创建许多条目.此外,日志文件可能会变得非常大,并且在检查错误报告时只会向我填充无关信息.
你们怎么处理这个?我对记录的频率感兴趣 - 因为我的应用程序响应了许多事件(例如鼠标移动;取决于用户输入),我不想创建过多的日志记录.
我开发了一个基于Python的绘图程序,Whyteboard(https://launchpad.net/whyteboard)
我正在开发功能,允许用户旋转和缩放他们绘制的多边形.这是我的问题:
我有一个Polygon类,其中包含所有点的列表,最后是"关闭".用户可以在我的程序中选择绘制的形状,"高亮"它们,在每个点绘制选择手柄.可以"抓住"这些点以改变其位置,并改变多边形的形状.
我有一个问题:我需要弄清楚如何计算应用于多边形的调整大小"比例".例如,(在按住鼠标的情况下),用户将鼠标从形状移开应该是"增长"动作,并且将鼠标移向形状应该缩小它.
我有代码来执行比例(我认为这是正确的),但我不能创建一个"好"的比例因子.根据答案,下面的代码是我提出的
/ edit - 这是解码的代码.
def rescale(self, x, y):
"""
x and y are the current mouse positions. the center and "original" mouse
coords are calculated below
"""
if not self.center:
a = sum([x for x, y in self.points]) / len(self.points)
b = sum([y for x, y in self.points]) / len(self.points)
self.center = (a, b)
if not self.orig_click: # where the user first clicked on
self.orig_click = (x, y)
if not self.original_points: # the …Run Code Online (Sandbox Code Playgroud) 我在测试Grails应用程序的身份验证时遇到了问题.看来浏览器不接受cookie,所以我创建了一个简单的grails应用程序作为测试.
<html>
<head>
<title>Welcome to Grails</title>
</head>
<body>
<g:each in="${request.cookies}">
<h1>${it.name} = <span class="value">${it.value}</span></h1>
</g:each>
<span class="value">test test</span>
</body>
Run Code Online (Sandbox Code Playgroud)
和我的Geb测试:
import spock.lang.Stepwise;
import geb.Page;
import geb.spock.GebReportingSpec
@Stepwise
class LoginSmokeTests extends GebReportingSpec {
String getBaseUrl() {
return "http://localhost:8080/test123/"
}
def "testing stuff"() {
given:
to HomePage
when:
println header
then:
at HomePage
}
}
class HomePage extends Page {
static at = { title == "Welcome to Grails" }
static content = {
header { $("span.value").first().text() }
}
}
Run Code Online (Sandbox Code Playgroud)
当我通过浏览器查看时,会打印2个cookie的值.当通过我的Geb测试访问它时,<span …
python ×5
asp.net-mvc ×2
asp.net ×1
autofac ×1
build ×1
distutils ×1
draw ×1
groovy ×1
htmlunit ×1
image ×1
install ×1
logging ×1
math ×1
mouse ×1
newrelic ×1
nopcommerce ×1
nose ×1
nosetests ×1
paint ×1
pickle ×1
polygon ×1
razor ×1
rescale ×1
rotation ×1
selenium ×1
twisted ×1
webtest ×1
whiteboard ×1
wxpython ×1