Some more usability additions to the ProcPool system. Also made it default
to turned off when SQLite3 is used - SQLite3 doesn't support multiple processes.
This commit is contained in:
parent
575d7a86fa
commit
275d00d4db
2 changed files with 15 additions and 2 deletions
|
|
@ -347,7 +347,11 @@ RSS_UPDATE_INTERVAL = 60*10 # 10 minutes
|
||||||
# multiple processes). But it may be slower for some
|
# multiple processes). But it may be slower for some
|
||||||
# combinations of database and operating system. Also, creating
|
# combinations of database and operating system. Also, creating
|
||||||
# objects from another process will require re-syncing of caches.
|
# objects from another process will require re-syncing of caches.
|
||||||
PROCPOOL_ENABLED = False
|
# ProcPool is disabled by default on SQlite3 since it cannot handle
|
||||||
|
# multiple process-writes very well. It should work fine with other supported
|
||||||
|
# databases. If you plan to change your database, copy the following line
|
||||||
|
# to your settings file to have it deactivate automatically for sqlite3.
|
||||||
|
PROCPOOL_ENABLED = not DATABASES["default"]["ENGINE"] == 'django.db.backends.sqlite3'
|
||||||
# relay process stdout to log (debug mode, very spammy)
|
# relay process stdout to log (debug mode, very spammy)
|
||||||
PROCPOOL_DEBUG = False
|
PROCPOOL_DEBUG = False
|
||||||
# max/min size of the process pool. Will expand up to max limit on demand.
|
# max/min size of the process pool. Will expand up to max limit on demand.
|
||||||
|
|
|
||||||
|
|
@ -557,6 +557,13 @@ def run_async(to_execute, *args, **kwargs):
|
||||||
enabled, if not this will raise a RunTimeError.
|
enabled, if not this will raise a RunTimeError.
|
||||||
|
|
||||||
reserved kwargs:
|
reserved kwargs:
|
||||||
|
'use_thread' (bool) - this only works with callables (not code).
|
||||||
|
It forces the code to run in a thread instead
|
||||||
|
of using the Process Pool, even if the latter
|
||||||
|
is available. This could be useful if you want
|
||||||
|
to make sure to not get out of sync with the
|
||||||
|
main process (such as accessing in-memory global
|
||||||
|
properties)
|
||||||
'at_return' -should point to a callable with one argument.
|
'at_return' -should point to a callable with one argument.
|
||||||
It will be called with the return value from
|
It will be called with the return value from
|
||||||
to_execute.
|
to_execute.
|
||||||
|
|
@ -635,13 +642,15 @@ def run_async(to_execute, *args, **kwargs):
|
||||||
_LOGGER.log_errmsg(err)
|
_LOGGER.log_errmsg(err)
|
||||||
return func
|
return func
|
||||||
|
|
||||||
|
use_thread = kwargs.pop("use_thread", False)
|
||||||
|
|
||||||
# handle special reserved input kwargs
|
# handle special reserved input kwargs
|
||||||
callback = convert_return(kwargs.pop("at_return", None))
|
callback = convert_return(kwargs.pop("at_return", None))
|
||||||
errback = convert_err(kwargs.pop("at_err", None))
|
errback = convert_err(kwargs.pop("at_err", None))
|
||||||
callback_kwargs = kwargs.pop("at_return_kwargs", {})
|
callback_kwargs = kwargs.pop("at_return_kwargs", {})
|
||||||
errback_kwargs = kwargs.pop("at_err_kwargs", {})
|
errback_kwargs = kwargs.pop("at_err_kwargs", {})
|
||||||
|
|
||||||
if _PPOOL:
|
if _PPOOL and not use_thread:
|
||||||
# process pool is running
|
# process pool is running
|
||||||
if isinstance(to_execute, basestring):
|
if isinstance(to_execute, basestring):
|
||||||
# run source code in process pool
|
# run source code in process pool
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue