@@ -858,11 +858,10 @@ def find_ipython():
858858 assert view .apply_sync (find_ipython )
859859
860860 @skip_without ('cloudpickle' )
861- @pytest .mark .xfail (reason = "cloudpickle doesn't seem to work right now" )
862861 def test_use_cloudpickle (self ):
863862 view = self .client [:]
864863 view ['_a' ] = 'engine'
865- sys .modules ['__main__' ]. _a = 'client'
864+ __main__ = sys .modules ['__main__' ]
866865
867866 @interactive
868867 def get_a ():
@@ -874,14 +873,52 @@ def get_a():
874873
875874 # enable cloudpickle
876875 view .use_cloudpickle ()
877- # cloudpickle respects engine values *if defined*
876+
877+ # cloudpickle prefers client values
878+ __main__ ._a = 'client'
878879 a_list = view .apply_sync (get_a )
879- self .assertEqual (a_list , ['engine' ] * len (view ))
880- # cloudpickle uses client values if engine doesn't override
880+ self .assertEqual (a_list , ['client' ] * len (view ))
881+
882+ # still works even if remote is undefined
881883 view .execute ('del _a' , block = True )
882884 a_list = view .apply_sync (get_a )
883885 self .assertEqual (a_list , ['client' ] * len (view ))
886+
884887 # restore pickle, shouldn't resolve
885- view .execute ('del _a' , block = True )
886888 view .use_pickle ()
887889 self .assertRaisesRemote (NameError , view .apply_sync , get_a )
890+
891+ @skip_without ('cloudpickle' )
892+ def test_cloudpickle_push_pull (self ):
893+ view = self .client [:]
894+ # enable cloudpickle
895+ view .use_cloudpickle ()
896+
897+ # push/pull still work
898+ view .push ({"key" : "pushed" }, block = True )
899+ ar = view .pull ("key" )
900+ assert ar .get (timeout = 10 ) == ["pushed" ] * len (view )
901+
902+ # restore pickle, should get the same value
903+ view .use_pickle ()
904+ ar = view .pull ("key" )
905+ assert ar .get (timeout = 10 ) == ["pushed" ] * len (view )
906+
907+ @skip_without ('cloudpickle' )
908+ @pytest .mark .xfail (reason = "@require doesn't work with cloudpickle" )
909+ def test_cloudpickle_require (self ):
910+ view = self .client [:]
911+ # enable cloudpickle
912+ view .use_cloudpickle ()
913+ assert (
914+ 'types' not in globals ()
915+ ), "Test condition isn't met if types is already imported"
916+
917+ @ipp .require ("types" )
918+ @ipp .interactive
919+ def func (x ):
920+ return types .SimpleNamespace (n = x ) # noqa: F821
921+
922+ res = view .apply_async (func , 5 )
923+ assert res .get (timeout = 10 ) == []
924+ view .use_pickle ()
0 commit comments