【发布时间】:2015-03-30 09:48:33
【问题描述】:
我正在开发基于以下内容的桌面软件:
- Python:PySide (WebKit)
- JavaScript:AngularJS
现在,我需要实现异步功能:
- 从 FTP(Python 部分)上传图片时,我需要在 UI (HTML+JS) 上显示一些上传器
需要关于优雅解决方案的建议。
非常简单的解决方案:
- 在 Python 字典中保存一些标志
- 通过计时器在JS中请求此标志的值:)
但是,我需要对时间进行硬编码,一旦我进行了长时间的操作,例如从 FTP 下载文件,这对我来说是个问题
解决方案代码:
templateManager.js
function _loadNewTemplates() {
var deferred = $.Deferred();
asyncManager.run($.proxy( _loadNewTemplatesCallback, null, deferred ), "get_new_templates_list" );
return deferred;
}
function _loadNewTemplatesCallback ( deferred, response ) {
template.newList = response.result;
deferred.resolve();
}
app_maager.py
@QtCore.Slot(int, result=str)
def get_new_templates_list(self, id):
thread.start_new_thread(get_new_templates_list,
(id,))
utils.py
def get_new_templates_list(id):
config.set_response(id, json.dumps({'result': _get_new_templates_list(), 'error': None}, MyEncoder))
def _get_new_templates_list():
request = {'category': PRODUCT_CODE}
response = requests.post(URL,
data=request,
headers=HEADERS)
return json.loads(response.text)
config.py
def set_response(id, request):
'''
Put pair (id, request) to the internal dictionary
:param id - int, request id:
:param request - string, request string:
:return:
'''
global _async_request
_async_request[id] = request
def get_response(id):
'''
Returns request or empty string if request does not exist
:param id - int
:return - string, request string:
'''
global _async_request
if _async_request.has_key(id):
return _async_request.pop(id)
else:
return ''
【问题讨论】:
-
问题中没有任何部分表明您尝试编写代码 - 请参阅 stackoverflow.com/help/how-to-ask
-
有什么更新吗?我有兴趣解决同样的问题
标签: javascript python angularjs multithreading qt