@@ -780,25 +780,31 @@ def configure_handler(self, config):
780780 # if 'handlers' not in config:
781781 # raise ValueError('No handlers specified for a QueueHandler')
782782 if 'queue' in config :
783- from multiprocessing .queues import Queue as MPQueue
784- from multiprocessing import Manager as MM
785- proxy_queue = MM ().Queue ()
786- proxy_joinable_queue = MM ().JoinableQueue ()
787783 qspec = config ['queue' ]
788- if not isinstance (qspec , (queue .Queue , MPQueue ,
789- type (proxy_queue ), type (proxy_joinable_queue ))):
790- if isinstance (qspec , str ):
791- q = self .resolve (qspec )
792- if not callable (q ):
793- raise TypeError ('Invalid queue specifier %r' % qspec )
794- q = q ()
795- elif isinstance (qspec , dict ):
796- if '()' not in qspec :
797- raise TypeError ('Invalid queue specifier %r' % qspec )
798- q = self .configure_custom (dict (qspec ))
799- else :
784+
785+ if isinstance (qspec , str ):
786+ q = self .resolve (qspec )
787+ if not callable (q ):
800788 raise TypeError ('Invalid queue specifier %r' % qspec )
801- config ['queue' ] = q
789+ config ['queue' ] = q ()
790+ elif isinstance (qspec , dict ):
791+ if '()' not in qspec :
792+ raise TypeError ('Invalid queue specifier %r' % qspec )
793+ config ['queue' ] = self .configure_custom (dict (qspec ))
794+ else :
795+ from multiprocessing .queues import Queue as MPQueue
796+ if not isinstance (qspec , (queue .Queue , MPQueue )):
797+ # create these instances as a last resort; In this case we
798+ # have either a multiprocessing.Manager.Queue /
799+ # multiprocessing.Manager.JoinableQueue or an invalid queue
800+ # specifier, which makes this less likely to throw errors
801+ # in cases where multiprocessing.Manager is not available
802+ from multiprocessing import Manager as MM
803+ proxy_queue = MM ().Queue ()
804+ proxy_joinable_queue = MM ().JoinableQueue ()
805+ if not isinstance (qspec , (type (proxy_queue ), type (proxy_joinable_queue ))):
806+ raise TypeError ('Invalid queue specifier %r' % qspec )
807+
802808 if 'listener' in config :
803809 lspec = config ['listener' ]
804810 if isinstance (lspec , type ):
0 commit comments