小编ean*_*son的帖子

Lazy <T>的缺点?

我最近在整个应用程序中开始使用Lazy,我想知道在使用时是否有任何明显的消极方面需要考虑Lazy<T>

我试图Lazy<T>尽可能经常使用,主要是为了帮助减少加载但非活动插件的内存占用.

c# mef lazy-evaluation

48
推荐指数
4
解决办法
4898
查看次数

如何在RabbitMQ中创建延迟队列?

使用Python,Pika和RabbitMQ创建延迟(或停放)队列的最简单方法是什么?我见过类似的问题,但Python没有.

在设计应用程序时,我发现这是一个有用的想法,因为它允许我们限制需要重新排队的消息.

总是有可能你会收到比你能处理的更多的消息,可能是HTTP服务器很慢,或者数据库压力太大.

我还发现,在对丢失消息零容忍的情况下出现问题时非常有用,而重新排队无法处理的消息可能会解决这个问题.它也可能导致消息一次又一次排队的问题.可能导致性能问题,并记录垃圾邮件.

python queue delay rabbitmq pika

44
推荐指数
3
解决办法
2万
查看次数

如何自动修复无效的JSON字符串?

从2gis API我得到以下JSON字符串.

{
    "api_version": "1.3",
    "response_code": "200",
    "id": "3237490513229753",
    "lon": "38.969916127827",
    "lat": "45.069889625267",
    "page_url": null,
    "name": "ATB",
    "firm_group": {
        "id": "3237499103085728",
        "count": "1"
    },
    "city_name": "Krasnodar",
    "city_id": "3237585002430511",
    "address": "Turgeneva,   172/1",
    "create_time": "2008-07-22 10:02:04 07",
    "modification_time": "2013-08-09 20:04:36 07",
    "see_also": [
        {
            "id": "3237491513434577",
            "lon": 38.973110606808,
            "lat": 45.029031222211,
            "name": "Advance",
            "hash": "5698hn745A8IJ1H86177uvgn94521J3464he26763737242Cf6e654G62J0I7878e",
            "ads": {
                "sponsored_article": {
                    "title": "Center "ADVANCE"",
                    "text": "Business.English."
                },
                "warning": null
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

但Python不承认它:

json.loads(firm_str)
Run Code Online (Sandbox Code Playgroud)

期待,分隔符:第1行第3646行(字符3645)

它看起来像引号中的问题:"标题":"中心"ADVANCE""

如何在Python中自动修复它?

python json escaping

18
推荐指数
4
解决办法
3万
查看次数

如何编辑WPF应用程序的MainWindow构造函数?

我的mainWindow需要订阅一个对象的一些事件.在创建MainWindow之前初始化对象.我想通过它的构造函数将此对象传递给mainWindow.

但是我无法弄清楚MainWindow构造函数的调用位置.可替换地我试图经由主窗口的成员函数来传递对象,但app.MainWindownullapp.Run()被调用.在app.Run()调用之后,代码在程序终止之前不会返回.

另一个可能性是将对象存储在静态类中并具有MainWindow访问权限,但这似乎不必要地复杂化.

我意识到我可以在MainWindow构造函数中创建对象,但这意味着必须在那里放置很多其他代码,几乎整个Main函数.

如何将此对象传递给我的MainWindow?或者MainWindow构造函数是否可以作为整个程序的"Main"?

c# wpf

16
推荐指数
1
解决办法
1万
查看次数

隐式地抛出一个浮点常数

请看一下这段代码:

#include <stdio.h>

int main(void)
{
    short s;
    int i = 65696;
    float f = 65696.0F;

    printf("sizeof(short) = %lu\n", sizeof(short));

    s = i;
    printf("s = %hd\n", s);
    s = f;
    printf("s = %hd\n", s);

    s = 65696;
    printf("s = %hd\n", s);
    s = 65696.0F;
    printf("s = %hd\n", s);

    return 0;
}  
Run Code Online (Sandbox Code Playgroud)

它给出了输出:

sizeof(short) = 2
s = 160
s = 160
s = 160
s = 32767
Run Code Online (Sandbox Code Playgroud)

在最后一行为什么它是32767而不是160?说f = 65696.0F; s = f;和之间有什么区别s = 65696.0F;

c floating-point casting

10
推荐指数
1
解决办法
209
查看次数

将Mac XML PList解析为可读的东西

我试图从XML PList(Apple System Profiler)文件中提取数据,并将其读入内存数据库,最后我想把它变成人类可读的东西.

问题是格式似乎很难以一致的方式阅读.我已经解决了一些解决方案,但我还没有找到解决方案,我觉得很满意.我总是不得不对很多值进行硬编码,最终需要很多if-else/switch statements.

格式如下所示.

<plist>
    <key>_system</key>
    <array>
     <dict>
      <key>_cpu_type</key>
      <string>Intel Core Duo</string>
     </dict>
    </array>
</plist>
Run Code Online (Sandbox Code Playgroud)

这里的示例文件.

在我阅读之后(或在阅读期间),我使用了一个内部字典来确定它是什么类型的信息.例如,如果密钥是cpu_type我保存相应的信息.


我尝试过的几个例子(simplified)来提取信息.

 XmlTextReader reader = new
 XmlTextReader("C:\\test.spx");

 reader.XmlResolver = null;

 reader.ReadStartElement("plist");

 String key = String.Empty; String str
 = String.Empty;

 Int32 Index = 0;

 while (reader.Read()) {

     if (reader.LocalName == "key")
     {
         Index++;
         key = reader.ReadString();
     }
     else if (reader.LocalName == "string")
     {
         str = reader.ReadString();

         if (key != String.Empty)
         { …
Run Code Online (Sandbox Code Playgroud)

c# xml macos plist xml-parsing

9
推荐指数
1
解决办法
4963
查看次数

根据安装的库选择动态选择适配器

我正在设计一个具有支持各种库的适配器的库.我希望库在导入特定类时动态选择哪个适配器具有在机器上安装的库.

目标是能够更改程序所依赖的库,而无需对代码进行修改.这个特殊功能用于处理RabbitMQ连接,因为我们遇到了很多关于鼠兔的问题,我们希望能够更改到不同的库,例如pyAMPQrabbitpy,而无需更改底层代码.

我想在__init__.py文件中 实现这样的东西servicelibrary.simple.

try:
    #import pika # Is pika installed?
    from servicelibrary.simple.synchronous import Publisher
    from servicelibrary.simple.synchronous import Consumer
except ImportError:
    #import ampq # Is ampq installed?
    from servicelibrary.simple.alternative import Publisher
    from servicelibrary.simple.alternative import Consumer
Run Code Online (Sandbox Code Playgroud)

然后当用户导入库时

from servicelibrary.simple import Publisher
Run Code Online (Sandbox Code Playgroud)

底层看起来像这样

alternative.py

import amqp

class Publisher(object):
    ......

class Consumer(object):
     ......    
Run Code Online (Sandbox Code Playgroud)

synchronous.py

import pika

class Publisher(object):
    ......

class Consumer(object):
     ......   
Run Code Online (Sandbox Code Playgroud)

当未安装第一个时,这将自动选择第二个.

是否有更好的方法来实现这样的事情?如果有人可以将库/适配器链接到类似的实现,这也是有用的.

[编辑]

实现这样的事最简洁的方法是什么?在将来,我还希望能够更改默认首选项.最终我可能只是满足于使用安装的库,因为我可以控制它,但它将是一个很好的功能.

Alexanders的建议很有意思,但我想知道是否有更清洁的方式.

[EDIT2]

最初的例子被简化了.每个模块可能包含多种类型的导入,例如Consumer和Publisher.

python module adapter libraries python-2.7

9
推荐指数
1
解决办法
357
查看次数

Python,MySQLdb和转义表名?

我可能会遗漏一些明显的东西,但我无法弄清楚我的代码与我在MySQLdb的在线文档中看到的各种示例有何不同.

我是编程python的新手,对perl更有经验.我想要做的是尽早养成一些好习惯(比如perl我总是从'use strict; use warnings'开始),所以我试图确保我在一个独立的文件中创建可重用的函数( funct.py)以节省我的时间.

我有这个函数用于从表中选择随机行:

def returnRandom(conn,countcol,table,field):
    cursor = conn.cursor()
    cursor.execute('SELECT MAX(%s) FROM %s',(countcol,table))
    maxRow = cursor.fetchone()[0]
    cursor.execute("SELECT MIN(%s) FROM %s",(countcol,table))
    minRow = cursor.fetchone()[0]
    randomId = random.randrange(minRow,maxRow+1,1)
    cursor.execute("SELECT ? FROM ? WHERE id >=? LIMIT 1",field,table,randomId)
    return cursor.fetchone()[0]
Run Code Online (Sandbox Code Playgroud)

它被称为这样:

msg = funct.returnRandom(conn,"id","testtable","data")
Run Code Online (Sandbox Code Playgroud)

不幸的是它出错了:_mysql_exceptions.ProgrammingError:(1064,"你的SQL语法有错误;请查看与你的MySQL服务器版本相对应的手册,以便在第1行''testtable''附近使用正确的语法")

如果我在执行行上放置testtable代替%s,查询将运行但看起来它运行

SELECT MAX('id') FROM testtable;
Run Code Online (Sandbox Code Playgroud)

当然返回'id'.

考虑到这两者,当它试图执行它们时,它会引用%s条目.我想知道是否有人可以解释我是如何让它停止这样做的,或者我应该如何实际做我想要实现的目标?我希望函数尽可能通用,因此依赖于在调用它时传递给它的数据.

编辑:我应该补充,如果我替换?分数:

....
    cursor.execute('SELECT MAX(?) FROM ?',(countcol,table))
File "/usr/lib/pymodules/python2.7/MySQLdb/cursors.py", line 151, in execute
    query = query % db.literal(args)
TypeError: not all arguments converted during string formatting
Run Code Online (Sandbox Code Playgroud)

python mysql-python

7
推荐指数
1
解决办法
3024
查看次数

一旦队列可用,就立即提取物品

我正在寻找一个可靠的实现,以允许我逐步使用Queue处理项目列表.

我的想法是,我想使用一定数量的工作人员,这些工作人员将通过20多个数据库密集型任务列表并返回结果.我希望Python从五个第一项开始,一旦完成一项任务就开始于队列中的下一个任务.

这就是我目前没有线程的方式.

for key, v in self.sources.iteritems():
    # Do Stuff
Run Code Online (Sandbox Code Playgroud)

我想有一个类似的方法,但可能无需将列表分成五个子组.这样它就会自动获取列表中的下一个项目.目标是确保如果一个数据库正在减慢进程,它将不会对整个应用程序产生负面影响.

python queue multithreading python-2.7

7
推荐指数
1
解决办法
288
查看次数

打破while循环功能?

我正在尝试创建一个包含if/elif语句的函数,我希望if打破一个while循环..该函数用于文本冒险游戏,是一个是/否的问题.这是我到目前为止所提出的......

def yn(x, f, g):
    if (x) == 'y':
         print (f)
         break
    elif (x) == 'n'
         print (g)

name = raw_input('What is your name, adventurer? ')
print 'Nice to meet you, '+name+'. Are you ready for your adventure?'

while True:
    ready = raw_input('y/n ')
    yn(ready, 'Good, let\'s start our adventure!', 
       'That is a real shame.. Maybe next time')
Run Code Online (Sandbox Code Playgroud)

现在我不确定我是否正在使用该功能,但是当我尝试它时,它说我不能在功能上中断.因此,如果有人可以帮助我解决这个问题,如果你能帮助我,如果函数和调用函数本身的格式错误,那将非常感激.

python function break

7
推荐指数
2
解决办法
2万
查看次数