Bug report #19762
QgsApplication.setMaxThreads not work appropriately
Status: | Closed | ||
---|---|---|---|
Priority: | Normal | ||
Assignee: | - | ||
Category: | Unknown | ||
Affected QGIS version: | 3.3(master) | Regression?: | No |
Operating System: | Easy fix?: | No | |
Pull Request or Patch supplied: | No | Resolution: | invalid |
Crashes QGIS or corrupts data: | No | Copied to github as #: | 27587 |
Description
qgis documentation say that if maxthreads is -1 means use all available cores.but no set any value if put -1
sample code :
from qgis.core import QgsApplication
from qgis.core import QgsApplication
QgsApplication.setMaxThreads(-1)
for solved this issue now:
from PyQt5.QtCore import QThread
from qgis.core import QgsApplication
threadcount = QThread.idealThreadCount()
QgsApplication.setMaxThreads(threadcount)
c++ code: https://qgis.org/api/qgsapplication_8cpp_source.html#l01645
History
#1 Updated by Jürgen Fischer about 6 years ago
- Status changed from Open to Feedback
How is that different from the quoted code?
#2 Updated by Francisco Raga about 6 years ago
Jürgen Fischer wrote:
How is that different from the quoted code?
then -1 set max thread if we see the API and it just does not do anything
#3 Updated by Jürgen Fischer about 6 years ago
Francisco Raga wrote:
Jürgen Fischer wrote:
How is that different from the quoted code?
then -1 set max thread if we see the API and it just does not do anything
What do you mean? If maxThreads is -1 it fetches QThread::idealThreadCount()
and set that - like your code.
void QgsApplication::setMaxThreads( int maxThreads )
{
QgsDebugMsg( QString( "maxThreads: %1" ).arg( maxThreads ) );
// make sure value is between 1 and #cores, if not set to -1 (use #cores)
// 0 could be used to disable any parallel processing
if ( maxThreads < 1 || maxThreads > QThread::idealThreadCount() )
maxThreads = -1;
// save value
ABISYM( mMaxThreads ) = maxThreads;
// if -1 use #cores
if ( maxThreads == -1 )
maxThreads = QThread::idealThreadCount();
// set max thread count in QThreadPool
QThreadPool::globalInstance()->setMaxThreadCount( maxThreads );
QgsDebugMsg( QString( "set QThreadPool max thread count to %1" ).arg( QThreadPool::globalInstance()->maxThreadCount() ) );
}
#4 Updated by Francisco Raga about 6 years ago
- File 3cores.png added
- File minus1.png added
- File 8cores.png added
Jürgen Fischer wrote:
Francisco Raga wrote:
Jürgen Fischer wrote:
How is that different from the quoted code?
then -1 set max thread if we see the API and it just does not do anything
What do you mean? If maxThreads is -1 it fetches
QThread::idealThreadCount()
and set that - like your code.[...]
Yes ,I know,but it doesn't work , When I put -1 , it doesn't check the QComboBox and doesn't change the spinbox,(attach minus1.png) but my pc have 8 cores,and now I write 3 or 8 , it sets the value well . It's weird,I know
#5 Updated by Jürgen Fischer about 6 years ago
- Resolution set to invalid
- Status changed from Feedback to Closed
Francisco Raga wrote:
Yes ,I know,but it doesn't work , When I put -1 , it doesn't check the QComboBox and doesn't change the spinbox,(attach minus1.png) but my pc have 8 cores,and now I write 3 or 8 , it sets the value well . It's weird,I know
That's the intended behavior. The checkbox expresses a limit and the spinbox shows what the limit is. -1 means unlimited and so the checkbox isn't checked. It just doesn't check whether the upper limit is also the physical limit - but effectively it's the same.