Show More
@@ -34,19 +34,13 b' The following will fail:' | |||
|
34 | 34 | In [3]: A = numpy.zeros(2) |
|
35 | 35 | |
|
36 | 36 | In [4]: def setter(a): |
|
37 | ...: a[0]=1 | |
|
38 | ...: return a | |
|
37 | ...: a[0]=1 | |
|
38 | ...: return a | |
|
39 | 39 | |
|
40 | 40 | In [5]: rc[0].apply_sync(setter, A) |
|
41 | 41 | --------------------------------------------------------------------------- |
|
42 |
R |
|
|
43 | ... | |
|
44 | RemoteError: RuntimeError(array is not writeable) | |
|
45 | Traceback (most recent call last): | |
|
46 | File "/path/to/site-packages/IPython/parallel/streamkernel.py", line 329, in apply_request | |
|
47 | exec code in working, working | |
|
48 | File "<string>", line 1, in <module> | |
|
49 | File "<ipython-input-14-736187483856>", line 2, in setter | |
|
42 | RuntimeError Traceback (most recent call last)<string> in <module>() | |
|
43 | <ipython-input-12-c3e7afeb3075> in setter(a) | |
|
50 | 44 | RuntimeError: array is not writeable |
|
51 | 45 | |
|
52 | 46 | If you do need to edit the array in-place, just remember to copy the array if it's read-only. |
@@ -759,7 +759,7 b' Parallel exceptions' | |||
|
759 | 759 | ------------------- |
|
760 | 760 | |
|
761 | 761 | In the multiengine interface, parallel commands can raise Python exceptions, |
|
762 |
just like serial commands. But |
|
|
762 | just like serial commands. But it is a little subtle, because a single | |
|
763 | 763 | parallel command can actually raise multiple exceptions (one for each engine |
|
764 | 764 | the command was run on). To express this idea, we have a |
|
765 | 765 | :exc:`CompositeError` exception class that will be raised in most cases. The |
@@ -768,58 +768,32 b' more other types of exceptions. Here is how it works:' | |||
|
768 | 768 | |
|
769 | 769 | .. sourcecode:: ipython |
|
770 | 770 | |
|
771 |
In [7 |
|
|
771 | In [78]: dview.block = True | |
|
772 | ||
|
773 | In [79]: dview.execute("1/0") | |
|
774 | [0:execute]: | |
|
775 | --------------------------------------------------------------------------- | |
|
776 | ZeroDivisionError Traceback (most recent call last)<ipython-input-1-05c9758a9c21> in <module>() | |
|
777 | ----> 1 1/0 | |
|
778 | ZeroDivisionError: integer division or modulo by zero | |
|
779 | ||
|
780 | [1:execute]: | |
|
781 | --------------------------------------------------------------------------- | |
|
782 | ZeroDivisionError Traceback (most recent call last)<ipython-input-1-05c9758a9c21> in <module>() | |
|
783 | ----> 1 1/0 | |
|
784 | ZeroDivisionError: integer division or modulo by zero | |
|
772 | 785 | |
|
773 | In [77]: dview.execute('1/0') | |
|
786 | [2:execute]: | |
|
774 | 787 | --------------------------------------------------------------------------- |
|
775 |
|
|
|
776 | /home/user/<ipython-input-10-5d56b303a66c> in <module>() | |
|
777 | ----> 1 dview.execute('1/0') | |
|
778 | ||
|
779 | /path/to/site-packages/IPython/parallel/client/view.pyc in execute(self, code, targets, block) | |
|
780 | 591 default: self.block | |
|
781 | 592 """ | |
|
782 | --> 593 return self._really_apply(util._execute, args=(code,), block=block, targets=targets) | |
|
783 | 594 | |
|
784 | 595 def run(self, filename, targets=None, block=None): | |
|
785 | ||
|
786 | /home/user/<string> in _really_apply(self, f, args, kwargs, targets, block, track) | |
|
787 | ||
|
788 | /path/to/site-packages/IPython/parallel/client/view.pyc in sync_results(f, self, *args, **kwargs) | |
|
789 | 55 def sync_results(f, self, *args, **kwargs): | |
|
790 | 56 """sync relevant results from self.client to our results attribute.""" | |
|
791 | ---> 57 ret = f(self, *args, **kwargs) | |
|
792 | 58 delta = self.outstanding.difference(self.client.outstanding) | |
|
793 | 59 completed = self.outstanding.intersection(delta) | |
|
794 | ||
|
795 | /home/user/<string> in _really_apply(self, f, args, kwargs, targets, block, track) | |
|
796 | ||
|
797 | /path/to/site-packages/IPython/parallel/client/view.pyc in save_ids(f, self, *args, **kwargs) | |
|
798 | 44 n_previous = len(self.client.history) | |
|
799 | 45 try: | |
|
800 | ---> 46 ret = f(self, *args, **kwargs) | |
|
801 | 47 finally: | |
|
802 | 48 nmsgs = len(self.client.history) - n_previous | |
|
803 | ||
|
804 | /path/to/site-packages/IPython/parallel/client/view.pyc in _really_apply(self, f, args, kwargs, targets, block, track) | |
|
805 | 529 if block: | |
|
806 | 530 try: | |
|
807 | --> 531 return ar.get() | |
|
808 | 532 except KeyboardInterrupt: | |
|
809 | 533 pass | |
|
810 | ||
|
811 | /path/to/site-packages/IPython/parallel/client/asyncresult.pyc in get(self, timeout) | |
|
812 | 101 return self._result | |
|
813 | 102 else: | |
|
814 | --> 103 raise self._exception | |
|
815 | 104 else: | |
|
816 | 105 raise error.TimeoutError("Result not ready.") | |
|
817 | ||
|
818 | CompositeError: one or more exceptions from call to method: _execute | |
|
819 | [0:apply]: ZeroDivisionError: integer division or modulo by zero | |
|
820 | [1:apply]: ZeroDivisionError: integer division or modulo by zero | |
|
821 | [2:apply]: ZeroDivisionError: integer division or modulo by zero | |
|
822 | [3:apply]: ZeroDivisionError: integer division or modulo by zero | |
|
788 | ZeroDivisionError Traceback (most recent call last)<ipython-input-1-05c9758a9c21> in <module>() | |
|
789 | ----> 1 1/0 | |
|
790 | ZeroDivisionError: integer division or modulo by zero | |
|
791 | ||
|
792 | [3:execute]: | |
|
793 | --------------------------------------------------------------------------- | |
|
794 | ZeroDivisionError Traceback (most recent call last)<ipython-input-1-05c9758a9c21> in <module>() | |
|
795 | ----> 1 1/0 | |
|
796 | ZeroDivisionError: integer division or modulo by zero | |
|
823 | 797 | |
|
824 | 798 | Notice how the error message printed when :exc:`CompositeError` is raised has |
|
825 | 799 | information about the individual exceptions that were raised on each engine. |
@@ -828,33 +802,14 b' If you want, you can even raise one of these original exceptions:' | |||
|
828 | 802 | .. sourcecode:: ipython |
|
829 | 803 | |
|
830 | 804 | In [80]: try: |
|
831 | ....: dview.execute('1/0') | |
|
805 | ....: dview.execute('1/0', block=True) | |
|
832 | 806 | ....: except parallel.error.CompositeError, e: |
|
833 | 807 | ....: e.raise_exception() |
|
834 |
....: |
|
|
835 |
....: |
|
|
808 | ....: | |
|
809 | ....: | |
|
836 | 810 | --------------------------------------------------------------------------- |
|
837 |
|
|
|
838 | /home/user/<ipython-input-17-8597e7e39858> in <module>() | |
|
839 | 2 dview.execute('1/0') | |
|
840 | 3 except CompositeError as e: | |
|
841 | ----> 4 e.raise_exception() | |
|
842 | ||
|
843 | /path/to/site-packages/IPython/parallel/error.pyc in raise_exception(self, excid) | |
|
844 | 266 raise IndexError("an exception with index %i does not exist"%excid) | |
|
845 | 267 else: | |
|
846 | --> 268 raise RemoteError(en, ev, etb, ei) | |
|
847 | 269 | |
|
848 | 270 | |
|
849 | ||
|
850 | RemoteError: ZeroDivisionError(integer division or modulo by zero) | |
|
851 | Traceback (most recent call last): | |
|
852 | File "/path/to/site-packages/IPython/parallel/engine/streamkernel.py", line 330, in apply_request | |
|
853 | exec code in working,working | |
|
854 | File "<string>", line 1, in <module> | |
|
855 | File "/path/to/site-packages/IPython/parallel/util.py", line 354, in _execute | |
|
856 | exec code in globals() | |
|
857 | File "<string>", line 1, in <module> | |
|
811 | ZeroDivisionError Traceback (most recent call last)<ipython-input-1-05c9758a9c21> in <module>() | |
|
812 | ----> 1 1/0 | |
|
858 | 813 | ZeroDivisionError: integer division or modulo by zero |
|
859 | 814 | |
|
860 | 815 | If you are working in IPython, you can simple type ``%debug`` after one of |
@@ -864,112 +819,56 b' instance:' | |||
|
864 | 819 | .. sourcecode:: ipython |
|
865 | 820 | |
|
866 | 821 | In [81]: dview.execute('1/0') |
|
822 | [0:execute]: | |
|
867 | 823 | --------------------------------------------------------------------------- |
|
868 |
|
|
|
869 | /home/user/<ipython-input-10-5d56b303a66c> in <module>() | |
|
870 | ----> 1 dview.execute('1/0') | |
|
871 | ||
|
872 | /path/to/site-packages/IPython/parallel/client/view.pyc in execute(self, code, targets, block) | |
|
873 | 591 default: self.block | |
|
874 | 592 """ | |
|
875 | --> 593 return self._really_apply(util._execute, args=(code,), block=block, targets=targets) | |
|
876 | 594 | |
|
877 | 595 def run(self, filename, targets=None, block=None): | |
|
878 | ||
|
879 | /home/user/<string> in _really_apply(self, f, args, kwargs, targets, block, track) | |
|
880 | ||
|
881 | /path/to/site-packages/IPython/parallel/client/view.pyc in sync_results(f, self, *args, **kwargs) | |
|
882 | 55 def sync_results(f, self, *args, **kwargs): | |
|
883 | 56 """sync relevant results from self.client to our results attribute.""" | |
|
884 | ---> 57 ret = f(self, *args, **kwargs) | |
|
885 | 58 delta = self.outstanding.difference(self.client.outstanding) | |
|
886 | 59 completed = self.outstanding.intersection(delta) | |
|
887 | ||
|
888 | /home/user/<string> in _really_apply(self, f, args, kwargs, targets, block, track) | |
|
889 | ||
|
890 | /path/to/site-packages/IPython/parallel/client/view.pyc in save_ids(f, self, *args, **kwargs) | |
|
891 | 44 n_previous = len(self.client.history) | |
|
892 | 45 try: | |
|
893 | ---> 46 ret = f(self, *args, **kwargs) | |
|
894 | 47 finally: | |
|
895 | 48 nmsgs = len(self.client.history) - n_previous | |
|
896 | ||
|
897 | /path/to/site-packages/IPython/parallel/client/view.pyc in _really_apply(self, f, args, kwargs, targets, block, track) | |
|
898 | 529 if block: | |
|
899 | 530 try: | |
|
900 | --> 531 return ar.get() | |
|
901 | 532 except KeyboardInterrupt: | |
|
902 | 533 pass | |
|
903 | ||
|
904 | /path/to/site-packages/IPython/parallel/client/asyncresult.pyc in get(self, timeout) | |
|
905 | 101 return self._result | |
|
906 | 102 else: | |
|
907 | --> 103 raise self._exception | |
|
908 | 104 else: | |
|
909 | 105 raise error.TimeoutError("Result not ready.") | |
|
910 | ||
|
911 | CompositeError: one or more exceptions from call to method: _execute | |
|
912 | [0:apply]: ZeroDivisionError: integer division or modulo by zero | |
|
913 | [1:apply]: ZeroDivisionError: integer division or modulo by zero | |
|
914 | [2:apply]: ZeroDivisionError: integer division or modulo by zero | |
|
915 | [3:apply]: ZeroDivisionError: integer division or modulo by zero | |
|
916 | ||
|
917 | In [82]: %debug | |
|
918 | > /path/to/site-packages/IPython/parallel/client/asyncresult.py(103)get() | |
|
919 | 102 else: | |
|
920 | --> 103 raise self._exception | |
|
921 | 104 else: | |
|
922 | ||
|
923 | # With the debugger running, self._exception is the exceptions instance. We can tab complete | |
|
924 | # on it and see the extra methods that are available. | |
|
925 | ipdb> self._exception.<tab> | |
|
926 | e.__class__ e.__getitem__ e.__new__ e.__setstate__ e.args | |
|
927 | e.__delattr__ e.__getslice__ e.__reduce__ e.__str__ e.elist | |
|
928 | e.__dict__ e.__hash__ e.__reduce_ex__ e.__weakref__ e.message | |
|
929 | e.__doc__ e.__init__ e.__repr__ e._get_engine_str e.print_tracebacks | |
|
930 | e.__getattribute__ e.__module__ e.__setattr__ e._get_traceback e.raise_exception | |
|
931 | ipdb> self._exception.print_tracebacks() | |
|
932 | [0:apply]: | |
|
933 | Traceback (most recent call last): | |
|
934 | File "/path/to/site-packages/IPython/parallel/engine/streamkernel.py", line 330, in apply_request | |
|
935 | exec code in working,working | |
|
936 | File "<string>", line 1, in <module> | |
|
937 | File "/path/to/site-packages/IPython/parallel/util.py", line 354, in _execute | |
|
938 | exec code in globals() | |
|
939 | File "<string>", line 1, in <module> | |
|
824 | ZeroDivisionError Traceback (most recent call last)<ipython-input-1-05c9758a9c21> in <module>() | |
|
825 | ----> 1 1/0 | |
|
940 | 826 | ZeroDivisionError: integer division or modulo by zero |
|
941 | 827 | |
|
942 | ||
|
943 | [1:apply]: | |
|
944 | Traceback (most recent call last): | |
|
945 | File "/path/to/site-packages/IPython/parallel/engine/streamkernel.py", line 330, in apply_request | |
|
946 | exec code in working,working | |
|
947 | File "<string>", line 1, in <module> | |
|
948 | File "/path/to/site-packages/IPython/parallel/util.py", line 354, in _execute | |
|
949 | exec code in globals() | |
|
950 | File "<string>", line 1, in <module> | |
|
828 | [1:execute]: | |
|
829 | --------------------------------------------------------------------------- | |
|
830 | ZeroDivisionError Traceback (most recent call last)<ipython-input-1-05c9758a9c21> in <module>() | |
|
831 | ----> 1 1/0 | |
|
951 | 832 | ZeroDivisionError: integer division or modulo by zero |
|
952 | 833 | |
|
953 | ||
|
954 | [2:apply]: | |
|
955 | Traceback (most recent call last): | |
|
956 | File "/path/to/site-packages/IPython/parallel/engine/streamkernel.py", line 330, in apply_request | |
|
957 | exec code in working,working | |
|
958 | File "<string>", line 1, in <module> | |
|
959 | File "/path/to/site-packages/IPython/parallel/util.py", line 354, in _execute | |
|
960 | exec code in globals() | |
|
961 | File "<string>", line 1, in <module> | |
|
834 | [2:execute]: | |
|
835 | --------------------------------------------------------------------------- | |
|
836 | ZeroDivisionError Traceback (most recent call last)<ipython-input-1-05c9758a9c21> in <module>() | |
|
837 | ----> 1 1/0 | |
|
962 | 838 | ZeroDivisionError: integer division or modulo by zero |
|
963 | 839 | |
|
964 | ||
|
965 | [3:apply]: | |
|
966 | Traceback (most recent call last): | |
|
967 | File "/path/to/site-packages/IPython/parallel/engine/streamkernel.py", line 330, in apply_request | |
|
968 | exec code in working,working | |
|
969 | File "<string>", line 1, in <module> | |
|
970 | File "/path/to/site-packages/IPython/parallel/util.py", line 354, in _execute | |
|
971 | exec code in globals() | |
|
972 | File "<string>", line 1, in <module> | |
|
840 | [3:execute]: | |
|
841 | --------------------------------------------------------------------------- | |
|
842 | ZeroDivisionError Traceback (most recent call last)<ipython-input-1-05c9758a9c21> in <module>() | |
|
843 | ----> 1 1/0 | |
|
844 | ZeroDivisionError: integer division or modulo by zero | |
|
845 | ||
|
846 | In [82]: %debug | |
|
847 | > /.../site-packages/IPython/parallel/client/asyncresult.py(125)get() | |
|
848 | 124 else: | |
|
849 | --> 125 raise self._exception | |
|
850 | 126 else: | |
|
851 | ||
|
852 | # Here, self._exception is the CompositeError instance: | |
|
853 | ||
|
854 | ipdb> e = self._exception | |
|
855 | ipdb> e | |
|
856 | CompositeError(4) | |
|
857 | ||
|
858 | # we can tab-complete on e to see available methods: | |
|
859 | ipdb> e.<TAB> | |
|
860 | e.args e.message e.traceback | |
|
861 | e.elist e.msg | |
|
862 | e.ename e.print_traceback | |
|
863 | e.engine_info e.raise_exception | |
|
864 | e.evalue e.render_traceback | |
|
865 | ||
|
866 | # We can then display the individual tracebacks, if we want: | |
|
867 | ipdb> e.print_traceback(1) | |
|
868 | [1:execute]: | |
|
869 | --------------------------------------------------------------------------- | |
|
870 | ZeroDivisionError Traceback (most recent call last)<ipython-input-1-05c9758a9c21> in <module>() | |
|
871 | ----> 1 1/0 | |
|
973 | 872 | ZeroDivisionError: integer division or modulo by zero |
|
974 | 873 | |
|
975 | 874 | |
@@ -982,21 +881,27 b' All of this same error handling magic even works in non-blocking mode:' | |||
|
982 | 881 | In [84]: ar = dview.execute('1/0') |
|
983 | 882 | |
|
984 | 883 | In [85]: ar.get() |
|
884 | [0:execute]: | |
|
985 | 885 | --------------------------------------------------------------------------- |
|
986 |
|
|
|
987 | /home/user/<ipython-input-21-8531eb3d26fb> in <module>() | |
|
988 | ----> 1 ar.get() | |
|
989 | ||
|
990 | /path/to/site-packages/IPython/parallel/client/asyncresult.pyc in get(self, timeout) | |
|
991 | 101 return self._result | |
|
992 | 102 else: | |
|
993 | --> 103 raise self._exception | |
|
994 | 104 else: | |
|
995 | 105 raise error.TimeoutError("Result not ready.") | |
|
996 | ||
|
997 | CompositeError: one or more exceptions from call to method: _execute | |
|
998 | [0:apply]: ZeroDivisionError: integer division or modulo by zero | |
|
999 | [1:apply]: ZeroDivisionError: integer division or modulo by zero | |
|
1000 |
|
|
|
1001 | [3:apply]: ZeroDivisionError: integer division or modulo by zero | |
|
886 | ZeroDivisionError Traceback (most recent call last)<ipython-input-1-05c9758a9c21> in <module>() | |
|
887 | ----> 1 1/0 | |
|
888 | ZeroDivisionError: integer division or modulo by zero | |
|
889 | ||
|
890 | [1:execute]: | |
|
891 | --------------------------------------------------------------------------- | |
|
892 | ZeroDivisionError Traceback (most recent call last)<ipython-input-1-05c9758a9c21> in <module>() | |
|
893 | ----> 1 1/0 | |
|
894 | ZeroDivisionError: integer division or modulo by zero | |
|
895 | ||
|
896 | [2:execute]: | |
|
897 | --------------------------------------------------------------------------- | |
|
898 | ZeroDivisionError Traceback (most recent call last)<ipython-input-1-05c9758a9c21> in <module>() | |
|
899 | ----> 1 1/0 | |
|
900 | ZeroDivisionError: integer division or modulo by zero | |
|
901 | ||
|
902 | [3:execute]: | |
|
903 | --------------------------------------------------------------------------- | |
|
904 | ZeroDivisionError Traceback (most recent call last)<ipython-input-1-05c9758a9c21> in <module>() | |
|
905 | ----> 1 1/0 | |
|
906 | ZeroDivisionError: integer division or modulo by zero | |
|
1002 | 907 |
General Comments 0
You need to be logged in to leave comments.
Login now