diff -r c46ecdbd217d Lib/multiprocessing/forking.py --- a/Lib/multiprocessing/forking.py Fri May 20 20:27:54 2011 +0300 +++ b/Lib/multiprocessing/forking.py Sat May 21 00:12:46 2011 +0400 @@ -348,11 +348,32 @@ The "freeze_support()" line can be omitted if the program is not going to be frozen to produce a Windows executable.''') + flag_opt_map = { + 'debug': 'd', + 'inspect': 'i', + 'interactive': 'i', + 'optimize': 'O', + 'dont_write_bytecode': 'B', + 'no_user_site': 's', + 'no_site': 'S', + 'ignore_environment': 'E', + 'verbose': 'v', + 'bytes_warning': 'b', + 'quiet': 'q' + } + args = [] + for flag, opt in flag_opt_map.items(): + v = getattr(sys.flags, flag) + if v > 0: + args.append('-' + opt * v) + for opt in sys.warnoptions: + args.append('-W' + opt) + if getattr(sys, 'frozen', False): return [sys.executable, '--multiprocessing-fork'] else: prog = 'from multiprocessing.forking import main; main()' - return [_python_exe, '-c', prog, '--multiprocessing-fork'] + return [_python_exe] + args + ['-c', prog, '--multiprocessing-fork'] def main(): diff -r c46ecdbd217d Lib/test/test_multiprocessing.py --- a/Lib/test/test_multiprocessing.py Fri May 20 20:27:54 2011 +0300 +++ b/Lib/test/test_multiprocessing.py Sat May 21 00:12:46 2011 +0400 @@ -1044,6 +1044,13 @@ # # +def proc_flags(x=None): + import sys + attrs = ['debug', 'inspect', 'interactive', 'optimize', + 'dont_write_bytecode', 'no_user_site', 'no_site', + 'ignore_environment', 'verbose', 'bytes_warning', 'quiet'] + return [(attr, getattr(sys.flags, attr, None)) for attr in attrs] + def sqr(x, wait=0.0): time.sleep(wait) return x*x @@ -1079,6 +1086,21 @@ self.assertRaises(multiprocessing.TimeoutError, get, timeout=TIMEOUT2) self.assertTimingAlmostEqual(get.elapsed, TIMEOUT2) + def test_flags(self): + flags = proc_flags() + + map_it = self.pool.map(proc_flags, range(2)) + for it in map_it: + self.assertEqual(it, flags) + + imap_it = self.pool.imap(proc_flags, range(2)) + for it in imap_it: + self.assertEqual(it, flags) + + imap_unordered_it = self.pool.imap_unordered(proc_flags, range(2)) + for it in imap_unordered_it: + self.assertEqual(it, flags) + def test_imap(self): it = self.pool.imap(sqr, list(range(10))) self.assertEqual(list(it), list(map(sqr, list(range(10)))))