小编bra*_*zzi的帖子

asyncore回调启动线程......好吗?

我不熟悉asyncore,并且对异步编程的知识非常有限,除了一些扭曲的教程介绍.

我最熟悉线程并在我的所有应用程序中使用它们.一个特定的应用程序使用couchdb数据库作为其接口.这涉及对数据库进行longpolling以寻找更改和更新.我用于couchdb的模块是couchdbkit.它使用asyncore循环来监视这些更改并将它们发送到回调.

所以,我从这个回调中发现了我启动工作线程的地方.混合异步和线程编程似乎有点粗糙.我真的很喜欢couchdbkit,但不想在我的程序中引入问题.

所以,我的问题是,从异步回调中触发线程是否安全?

这是一些代码......

def dispatch(change):
    global jobs, db_url # jobs is my queue
    db = Database(db_url)
    work_order = db.get(change['id']) # change is an id to the document that changed. 
                                  # i need to get the actual document (workorder)

    worker = Worker(work_order, db) # fire the thread
    jobs.append(worker)
    worker.start()
    return


main()
.
.
.

consumer.wait(cb=dispatch, since=update_seq, timeout=10000) #wait constains the asyncloop.
Run Code Online (Sandbox Code Playgroud)

更新:

在仔细研究了这个之后,我还有一个关于couchdbkit大师的问题.使用该数据库可能有数百个线程.正如您在我的代码示例中所看到的,我正在为每个线程实例化一个couchdbkit.Database对象.我认为这可能是浪费.那么,在线程中全局使用单个数据库对象是否可以?

python multithreading couchdb asyncore

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

通过JSF中的<h:message>重定向呈现后保留FacesMessage

我有我认为是一个常见的问题:一些托管bean有一个动作,它向上下文添加一些消息:

FacesMessage fm = new FacesMessage("didn't work");
fm.setSeverity(FacesMessage.SEVERITY_ERROR);
FacesContext.getCurrentInstance().addMessage(null, fm);
return "some-outcome";
Run Code Online (Sandbox Code Playgroud)

然后我将结果映射faces-config.xml并配置为

<navigation-case>
    <from-outcome>some-outcome</from-outcome>
    <to-view-id>/view.xhtml</to-view-id>
    <redirect/>
</navigation-case>
Run Code Online (Sandbox Code Playgroud)

view.xhtml我提出的信息:

<h:message globalsOnly="true" />
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用,因为执行重定向时消息会丢失.

我该如何解决?我发现这个惊人的帖子解释了如何使用a来做,PhaseListener但我相信这种情况太常见了,不能用这种方式来解决.我错了吗?我应该创建PhaseListener吗?或者是否有其他标准解决方案?

java jsf redirect jsf-2

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

下载Cocoa API文档

是否可以下载所有Cocoa API文档?我必须离线工作很多次,有时怀疑会阻止我的所有工作......

macos xcode cocoa

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

在python中,当您将内部定义的函数传递给其他函数时,它如何保留变量?

例如,为什么这有效?

def func1(func1var):
    def innerfunc(innerfuncvar):
        if func1var == 1:
             print innerfuncvar
        else:
             print 5
    func2(innerfunc)


def func2(function):
     function(9)
Run Code Online (Sandbox Code Playgroud)

innerfunc被调用时func2,它如何知道func1var?的值?

python function-pointers function

9
推荐指数
2
解决办法
453
查看次数

Mercurial:消息"abort:index 00changelog.i已损坏!" 运行sed命令后.怎么处理呢?

我有一个由Mercurial版本的项目.有一次,我跑了一个命令如...

$ find . -type f | xargs sed -i.bkp 's/my_func/another_func/'
Run Code Online (Sandbox Code Playgroud)

......在这个项目中.然后Mercurial停下来继续工作:

$ hg status
abort: index 00changelog.i is corrupted!
Run Code Online (Sandbox Code Playgroud)

该文件00changelog.i不包含替换的字符串,即使我移动00changelog.i.bkp00changelog.i问题仍然存在.hg verify没有帮助:

$ hg verify
abort: index 00changelog.i is corrupted!
Run Code Online (Sandbox Code Playgroud)

我通过从另一个目录中的远程存储库克隆项目然后.hg从我的克隆存储库复制到损坏的存储库来解决了这个问题.但是,我想知道:还有另一种更实用的解决方法吗?顺便说一句,如果"损坏的"文件甚至没有改变,为什么会出现这个问题呢?

version-control mercurial corrupt

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

从XUL运行JavaScript代码的单元测试 - 什么和如何

我正在写一个XUL应用程序.它不是Firefox扩展,而是通过XULrunner使用的独立应用程序.我的目的是在我的开发过程中采用TDD,我将RhinoUnit视为我的单元测试框架.无论如何我会尝试使用它,但没有太多关于测试XUL应用程序的文档.有些人谈论使用UxU - 但仅限于Firefox插件 - 和Mochitest - 如果你只想测试Mozilla.

我的问题是:是否有人用单元测试编写了一些XUL应用程序?您使用了什么工具,如果是我提到过的人,您是如何使用它的?

javascript unit-testing xul rhino rhino-unit

8
推荐指数
1
解决办法
468
查看次数

如何在python中使用mechanize选择下拉菜单中的项目?

我真的很困惑.我基本上试图用机械化为python填写网站上的表格.除了下拉菜单,我得到了一切工作.我用什么来选择它以及我为该值添加了什么?我不知道我是否应该把选择的名称或它的数值.非常感谢帮助,谢谢.

代码段:

try:
        br.open("http://www.website.com/")
        try:
            br.select_form(nr=0)
            br['number'] = "mynumber"
            br['from'] = "herpderp@gmail.com"
            br['subject'] = "Yellow"
            br['carrier'] = "203"
            br['message'] = "Hello, World!"
            response = br.submit()
        except:
            pass
    except:
        print "Couldn't connect!"
        quit
Run Code Online (Sandbox Code Playgroud)

我在运营商遇到了麻烦,这是一个下拉菜单.

python mechanize drop-down-menu

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

使用CDI注入命名字符串

我希望以这种方式注入配置参数:

public class MyManagedBean {
    @Inject
    public MyManagedBean(@Named("user") String user){
        ....

    }
}
Run Code Online (Sandbox Code Playgroud)

所以我尝试用这种方式实现一个生成器方法:

@ApplicationScoped
public class MyConfiguration {
    private Properties loadProperties() {
        Properties properties = new Properties();
        try {
            properties.load(getClass().getResourceAsStream(
                    "user.properties"));
        } catch (IOException e) {
            throw new RuntimeException();
        }
        return properties;
    }

    @Produces
    @Named("user")
    String getUser() {
        return loadProperties().getProperty("user");
    }
}
Run Code Online (Sandbox Code Playgroud)

我有这样定义的其他bean:

public class OtherManagedBean {
    @Inject
    public OtherManagedBean(MyManagedBean myManagedBean){
        ....

    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试部署它时,我遇到了这个异常:

INFO: WEB0671: Loading application [example-ear#example-war.war] at [example]
SEVERE: Exception while loading the app
SEVERE: …
Run Code Online (Sandbox Code Playgroud)

java string dependency-injection named cdi

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

为什么+运算符不会在.append()的情况下更改列表?

我正在通过Udacity和Dave Evans介绍了关于列表属性的练习

list1 = [1,2,3,4]
list2 = [1,2,3,4]

list1=list1+[6]
print(list1)
list2.append(6)
print(list2)

list1 = [1,2,3,4]
list2 = [1,2,3,4]

def proc(mylist):
    mylist = mylist + [6]

def proc2(mylist):
    mylist.append(6)

# Can you explain the results given by the four print statements below? Remove
# the hashes # and run the code to check.

print (list1)
proc(list1)
print (list1)

print (list2)
proc2(list2)
print (list2)
Run Code Online (Sandbox Code Playgroud)

输出是

[1, 2, 3, 4, 6]
[1, 2, 3, 4, 6]
[1, 2, 3, 4]
[1, 2, 3, …
Run Code Online (Sandbox Code Playgroud)

python list concatenation append

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

为什么当我附加到其中的列表时元组的内容会发生变化,但是当我更新变量时它没有改变?

myVar = ["jhhj", "hgc"]
myTuple = ([1,2,3], [4,5,6], myVar)
myVar.append('lololol')
print myTuple
Run Code Online (Sandbox Code Playgroud)

为什么以及如何通过在施工后附加来修改这个元组?

myVar = "lol"
myTuple = ([1,2,3], [4,5,6], myVar)
myVar = "lolol"
print myTuple
Run Code Online (Sandbox Code Playgroud)

为什么打印出来([1,2,3], [4,5,6], "lol")而不是([1,2,3], [4,5,6], "lolol")

python tuples list append variable-assignment

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