我正在为我的 CherryPy 应用程序编写调试方法。有问题的代码(非常)基本上等同于:
import cherrypy
class Page:
def index(self):
try:
self.body += 'okay'
except AttributeError:
self.body = 'okay'
return self.body
index.exposed = True
cherrypy.quickstart(Page(), config='root.conf')
Run Code Online (Sandbox Code Playgroud)
我很惊讶地注意到,从一个请求到另一个请求,self.body 的输出都在增长。当我从一个客户端访问页面,然后从另一个同时打开的客户端访问页面,然后刷新这两个客户端的浏览器时,输出是不断增加的“okay”字符串。在我的调试方法中,我还记录了特定于用户的信息(即会话数据),并且这些信息也显示在两个用户的输出中。
我假设这是因为 python 模块被加载到工作内存中,而不是为每个请求重新运行。
我的问题是:这是如何工作的?self.debug 是如何从请求到请求保留的,但cherrypy.session 和cherrypy.response 不是?
有没有办法设置一个只用于当前请求的对象属性?我知道我可以根据每个请求覆盖 self.body,但这似乎有点临时。在 CherryPy 中是否有标准或内置的方法?
(第二个问题移到CherryPy 缓存如何工作?)
我想要类似静态类变量的东西,除非不同的应用程序加载我的程序集我希望它们都共享同一个变量.
我知道我可以写入磁盘或数据库,但这是一个与sql查询一起使用的进程,这可能会减慢太多(实际上我会测试这些选项但是我在问这个问题)与此同时,我认为这不是一个可以接受的解决方案.
我更愿意使用在部署中产生最少开销的解决方案,我不介意解决方案是否易于创建,只要它在我完成时易于使用.
我知道那里有一些持久的内存框架.我还没有检查过它们中的任何一个,也许其中一个是完美的,所以随意推荐一个.我也非常满足于自己写一些东西,特别是如果它让我更容易部署.
提前感谢任何和所有建议!
编辑:看起来我忽略了一个非常简单的解决方案.我的问题涉及SQL只提供8000字节的空间来在我写的SQL聚合函数调用之间序列化数据.我读了一篇关于如何压缩数据并从8000字节中获取最多的文章,并假设我无能为力.事实证明,我可以设置MaxBytes = -1而不是0到8000之间的范围,以获得高达2GB的空间.我相信这是他们在3.5框架中添加的新内容,因为有很多文章在讨论这个8000字节的限制.
谢谢大家的答案,因为这是一个我过去想解决的问题,现在我知道如果我需要一种非常简单快捷的方式在应用程序之间进行通信,该怎么办.
网络是我硕士学位的最后一门课程.我确实有一个关于如何计算非持久性,持久性和持久性与流水线的http的往返时间的问题.
花了无数个小时阅读有关问题,从其他unis下载笔记,甚至搜索youtube视频我无法解决这个问题.
为了理解如何计算RTT,我们只是说客户端要求包含10个图像的HTML页面.[让我们将传播延迟保持为零.]
请遵循我的逻辑
首先,TCP连接的3路握手计为1 RTT.TCP连接关闭时也是如此.
1)在非持久性HTTP中,我们必须建立TCP连接,因此到目前为止它是1个RTT.由于我们有10个对象,我们将有2*10 = 20个RTT.这导致1RTT +20 RTT = 21 RTT.[另一种可以计算的方法是说,因为它每次打开新的连接,对于10个对象,它将需要3个RTT,因此它将是30个RTT.
2)在持久性HTTP中,我们需要一个1RTT用于连接,1个用于每个对象.这导致1RTT + 10RTT = 11 RTT.[我应该添加一个RTT来关闭连接,从而导致12个RTT?根据我的理解,它会在一段时间后自行消失.]
3)在使用流水线操作的持久HTTP中,我们需要一个RTT来打开TCP连接,一个RTT发送10个对象,一个RTT来关闭连接.这导致1RTT + 1RTT + 1RTT = 3 RTT.
任何有关此事的帮助将非常感谢!
我不确定在这篇文章中要包含什么内容,因为我真的不理解错误消息,所以我只包含了错误、Model.hs 文件和模型。我正在使用 MySQL 的 Yesod 脚手架网站。我使用的操作系统是 Ubuntu。如果您需要查看任何其他代码(例如数据定义),请询问。
\n\n错误信息:
\n\n[ 6 of 20] Compiling Model ( src/Model.hs, .stack-work/dist/x86_64-linux/Cabal-1.24.2.0/build/Model.o )\n\n/home/james/ConVoke/convoke-website/src/Model.hs:24:7: error:\n \xe2\x80\xa2 No instance for (persistent-2.7.0:Database.Persist.Sql.Class.PersistFieldSql\n Language)\n arising from a use of \xe2\x80\x98persistent-2.7.0:Database.Persist.Sql.Class.sqlType\xe2\x80\x99\n \xe2\x80\xa2 In the fourth argument of \xe2\x80\x98FieldDef\xe2\x80\x99, namely\n \xe2\x80\x98persistent-2.7.0:Database.Persist.Sql.Class.sqlType\n (Data.Proxy.Proxy :: Data.Proxy.Proxy Language)\xe2\x80\x99\n In the expression:\n FieldDef\n (HaskellName (packPTH "language"))\n (DBName (packPTH "language"))\n (FTTypeCon Nothing (packPTH "Language"))\n (persistent-2.7.0:Database.Persist.Sql.Class.sqlType\n (Data.Proxy.Proxy :: Data.Proxy.Proxy Language))\n []\n True\n NoReference\n In the \xe2\x80\x98entityFields\xe2\x80\x99 field of a record\n\n-- While building package website-0.0.0 using:\n …Run Code Online (Sandbox Code Playgroud) 我一直试图想出这个问题,直到今晚.我已经用Google搜索了它,并没有任何示例或我的黑客实例完成它.看起来这应该很简单,但我无法得到它.这是代码:
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
my $complex_variable = {};
my $MEMORY = "$ENV{HOME}/data/memory-file";
$complex_variable->{ 'key' } = 'value';
$complex_variable->{ 'key1' } = 'value1';
$complex_variable->{ 'key2' } = 'value2';
$complex_variable->{ 'key3' } = 'value3';
print Dumper($complex_variable)."TEST001\n";
open M, ">$MEMORY" or die;
print M Data::Dumper->Dump([$complex_variable], ['$complex_variable']);
close M;
$complex_variable = {};
print Dumper($complex_variable)."TEST002\n";
# Then later to restore the value, it's simply:
do $MEMORY;
#eval $MEMORY;
print Dumper($complex_variable)."TEST003\n";
Run Code Online (Sandbox Code Playgroud)
这是我的输出:
$VAR1 = {
'key2' => 'value2',
'key1' => 'value1',
'key3' => …Run Code Online (Sandbox Code Playgroud) 当收到推送通知时,有没有办法让声音持续播放,直到用户采取行动 - 比如按OK按钮 - 当应用程序未激活时?
我想发送推送消息并让警报声继续播放,直到用户响应模仿寻呼机的行为.
这可能吗?建议?
我是F#的C#开发人员,我知道在.net中字符串是不可变的。换句话说,每次修改字符串时,都会得到一个新的字符串实例。
对于像我这样的非功能性头脑,第一个问题将是效率,而且我了解C#可变对象不是持久性的。因为在大多数应用程序中字符串操作通常都很简单。
我的问题是,F#列表也是这种情况吗?F#是否会在更改时克隆每个列表?例如,当过滤列表时,我是否会创建一个包含较少项目的新列表?
更新:我没有比较.net字符串和列表。我将字符串命名为一个不可变对象的示例,并且想知道F#是否为其List提供任何特殊处理。
这就是我所说的“ 持久 ”。
我正在使用POCO C ++ lib版本1.4.3来实现HTTP服务器。在我的用例中,只有两个或三个客户端,我想拥有持久的连接。客户端发送带有放置请求的数据,服务器使用“ HTTP / 1.1 201 Created”(HTTP / 1.1 201已创建)进行应答。客户端打开多个连接。其中一个客户端可以同时打开20个连接。
我在HTTPServerParams和Poco :: Net :: ServerSocket(myPort)中使用默认值,并且在使用Poco :: ThreadPool(16,48)。
客户端发送一个http put请求,服务器将回答:
Server:
HTTP/1.1 201 Created
Connection: Close
Date: Thu, 31 Jan 2013 15:21:50 GMT
Run Code Online (Sandbox Code Playgroud)
我在带有WireShark的PCAP文件中看到了此结果。
如果我不希望服务器在放置请求后关闭连接,该怎么办?
---编辑并插入源代码:
HTTPServer::HTTPServer(uint16_t port,
Poco::Net::HTTPRequestHandlerFactory* handlerFactory):
m_port(port),
m_wasStarted(false)
{
// HTTPServer takes ownership
Poco::Net::HTTPServerParams* options = new Poco::Net::HTTPServerParams;
try
{
m_threadPool.reset(new Poco::ThreadPool (16,48));
std::cout << "HTTPServerParams.keepAlive: "
<< options->getKeepAlive() << std::endl;
std::cout << "HTTPServerParams.keepAliveTimeout: "
<< options->getKeepAliveTimeout().totalSeconds() << std::endl;
std::cout << "HTTPServerParams.MaxKeepAliveRequests: "
<< options->getMaxKeepAliveRequests()<< …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Database.Persistant为Scotty应用程序创建数据库,我无法弄清楚在表之间添加外键约束的语法.例如,我有一个User桌子和一个Post表,我想Post表有一个属性,authorId它引用UserId在User.这可以在原始SQL中很容易地完成,但我希望能够通过haskell访问数据而无需使用原始sql命令.此外,约束将是在数据库迁移时覆盖.这就是我目前定义数据库的方法:
share [mkPersist sqlSettings, mkMigrate "migrateAll"]
[persistLowerCase|
User
name String
email String
username String
Primary username
deriving Show
Post
title String
content T.Text
author String
deriving Show
|]
Run Code Online (Sandbox Code Playgroud)
这很好,但没有关键限制,这可能是一件非常糟糕的事情.如果我尝试在github上添加像wiki这样的外键约束,通过将该行添加Foreign User authorfk author到Post块中,它编译得很好,但没有任何反应; 不会发生迁移,也不会引入外键约束.
我究竟做错了什么?任何帮助或建议将不胜感激.
为了清楚起见,我想要的是Post中的author属性来引用User中的现有用户名.
这是我第二次尝试学习Haskell,而我一直听到的一件事就是不要重复自己(其他语言也是如此).
无论如何......我正在尝试实现一个博客并发现需要在数据库上实现CRUD操作,但是当我为评论,帖子和用户实现CRUD时,在我看来,我只是在重复自己.
问题是我看不出怎么不重复自己.
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
module Model where
import Control.Monad.IO.Class (liftIO)
import Control.Monad.Logger (runStderrLoggingT)
import Database.Persist
import Database.Persist.Postgresql
import Database.Persist.TH
import Data.Time
import Data.Int
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
Users
email String
password String
alias String
image_url String
show_email Bool
UniqueEmail email
date UTCTime default=CURRENT_TIMESTAMP …Run Code Online (Sandbox Code Playgroud) persistent ×10
haskell ×3
yesod ×3
.net ×1
audio ×1
c# ×1
c++ ×1
cherrypy ×1
connection ×1
data-dumper ×1
data-storage ×1
database ×1
f# ×1
http ×1
httpserver ×1
immutability ×1
ios ×1
iphone ×1
memory ×1
mysql ×1
performance ×1
perl ×1
pipelining ×1
poco ×1
python ×1
request ×1
sqlite ×1
tcp ×1