-
Notifications
You must be signed in to change notification settings - Fork 185
Closed
Description
I tried to pickle a lambda function that calls another function with a global variable as an argument. It then unpickles the lambda in a new process and tries to call it. When it does so, it doesn't see the value of the global variable when it was pickled, but instead the original value of the variable, None. The issues goes away when I no longer modify the global variable using the global keyword in the helper function. The following is pseudocode of what fails:
args = None
def parse_args():
# set up argument parser here (code omitted)
global args
args = parser.parse_args()
def main():
parse_args()
fns = [lambda: something(args)]*10
wrappers = [CloudpickleWrapper(f) for f in fns]
# For each wrapped function, start a process that calls that function (code omitted)
# In these processes, they unexpectedly see `args` as being `None` instead of the results of the argument parser
if __name__=="__main__":
main()I am running Windows 10, Anaconda Python 3.6. This issue did not occur on Ubuntu when I tested it!.
The following tests fail under windows when I run tox. No tests failed under Ubuntu. These are the tests:
tests/cloudpickle_file_test.py::CloudPickleFileTests::test_closed_file PASSED
tests/cloudpickle_file_test.py::CloudPickleFileTests::test_empty_file PASSED
tests/cloudpickle_file_test.py::CloudPickleFileTests::test_pickling_special_file_handles PASSED
tests/cloudpickle_file_test.py::CloudPickleFileTests::test_plus_mode PASSED
tests/cloudpickle_file_test.py::CloudPickleFileTests::test_r_mode PASSED
tests/cloudpickle_file_test.py::CloudPickleFileTests::test_seek PASSED
tests/cloudpickle_file_test.py::CloudPickleFileTests::test_temp_file SKIPPED
tests/cloudpickle_file_test.py::CloudPickleFileTests::test_w_mode PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_Ellipsis PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_EllipsisType PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_NoneType PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_NotImplemented PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_NotImplementedType PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_abc PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_attrgetter PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_buffer PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_builtin_function_without_module PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_builtin_type__new__ PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_cell_manipulation PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_classmethod PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_closure_interacting_with_a_global_variable PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_closure_none_is_preserved PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_correct_globals_import PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_cycle_in_classdict_globals PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_dynamic_module FAILED
tests/cloudpickle_test.py::CloudPickleTest::test_dynamic_modules_globals FAILED
tests/cloudpickle_test.py::CloudPickleTest::test_dynamic_pytest_module PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_dynamically_generated_class_that_uses_super PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_empty_cell_preserved PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_extended_arg PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_faulty_module PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_func_globals PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_function_from_dynamic_module_with_globals_modifications FAILED
tests/cloudpickle_test.py::CloudPickleTest::test_function_module_name PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_function_pickle_compat_0_4_0 SKIPPED
tests/cloudpickle_test.py::CloudPickleTest::test_function_pickle_compat_0_4_1 SKIPPED
tests/cloudpickle_test.py::CloudPickleTest::test_function_qualname PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_generator PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_import FAILED
tests/cloudpickle_test.py::CloudPickleTest::test_instancemethods_without_self PASSED
tests/cloudpickle_test.py::CloudPickleTest::test_interactively_defined_function FAILED
Metadata
Metadata
Assignees
Labels
No labels