我正在开发基于以下内容的桌面软件:
现在,我需要实现异步功能:
需要您对优雅解决方案的建议。
非常简单的解决方案:
但是,我需要硬编码时间,一旦我有长时间的操作,比如从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_mamager.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 ''
答案 0 :(得分:2)
以下是您可以做的事情:
stat
/ stat.ST_SIZE
,chunk
尺寸,PySide.QtGui.QProgressBar.setRange()
,对于二进制文件或文本文件的行数,为0到块数(filesize / ftp传输块大小)。ftplib.FTP.storbinary()
或ftplib.FTP.storlines()
,以便通过PySide.QtGui.QProgressBar.setValue()