@@ -780,25 +780,31 @@ def configure_handler(self, config):
780
780
# if 'handlers' not in config:
781
781
# raise ValueError('No handlers specified for a QueueHandler')
782
782
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 ()
787
783
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 ):
800
788
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
+
802
808
if 'listener' in config :
803
809
lspec = config ['listener' ]
804
810
if isinstance (lspec , type ):
0 commit comments