我有一个ListView连接到ArrayAdapter,其中Artist是我的一个简单类,它只有一个id和一个名字.
现在我想过滤ListView,所以我打电话:
artistAdapter.getFilter().filter("bla", new Filter.FilterListener() {
public void onFilterComplete(int count) {
Log.d(Config.LOG_TAG, "filter complete! count: " + count); // returns 8
Log.d(Config.LOG_TAG, "adapter count: " + artistAdapter.getCount()); // return 1150
}
});
Run Code Online (Sandbox Code Playgroud)
第一个调试语句打印的计数为8.这是以"bla"开头的listitems的正确计数,但是适配器没有得到它.第二个调试语句打印一个计数1150项.这是列表中的完整项目数.
因此,过滤器不会告诉适配器它已经过滤了底层数据.
我现在想知道:我的适配器中是否有代码,以便从过滤器获取更新?我必须编写自定义过滤器吗?我需要做什么?
我在Nginx后面的Gunicorn中运行了一个Django应用程序.一切正常,可以解决一件奇怪的事情:我有一个"下载"视图和一个RESTful json API.调用下载视图时,我使用urllib2访问json API以获取信息.并且当我尝试对json api执行此http请求时,请求超时,出现错误HTTP错误504:网关超时.
当我使用./manage.py运行服务器运行代码时,一切正常.对json api的http get请求也只需几毫秒,因此没有遇到超时的危险.
这里的伪代码情况:
myproject/views.py:(可访问:http://myproject.com/download)
1 def download(request, *args, **kwargs):
2 import urllib2
3 opener = urllib2.build_opener()
4 opener.open('http://myproject.com/api/get_project_stats')
Run Code Online (Sandbox Code Playgroud)
第四opener.open()行中的调用在Gunicorn中运行时会进入超时状态,当./manage.py runserver每次运行时运行正常(并且api调用只需要几毫秒).
有没有人有同样的问题?更重要的是:你是如何解决的?
我使用djutils @async装饰器异步调用函数.当我使用标准./manage.py runserver命令启动我的服务器时,这很有效.但是当我在gunicorn下运行我的django应用程序并且我用@async装饰器调用该函数时根本没有任何事情发生...
我查看了djutils异步装饰器的代码,它添加并反对python标准的Queue,并生成一个或多个线程来使用队列.
任何人有想法或提示我应该在哪里看下一步,让我的@async功能在gunicorn中运行?gunicornn是否正在改变python线程实现的标准实现?