diff -r c7ce67c9237a Lib/multiprocessing/forking.py --- a/Lib/multiprocessing/forking.py Thu Apr 28 17:27:59 2011 +0200 +++ b/Lib/multiprocessing/forking.py Sat May 21 00:15:36 2011 +0400 @@ -319,11 +319,36 @@ 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', + 'py3k_warning': '3', + 'division_warning': 'Q', + 'division_new': 'Qnew', + 'inspect': 'i', + 'interactive': 'i', + 'optimize': 'O', + 'dont_write_bytecode': 'B', + 'no_user_site': 's', + 'no_site': 'S', + 'ignore_environment': 'E', + 'tabcheck': 't', + 'verbose': 'v', + 'unicode': 'U', + 'bytes_warning': 'b', + } + 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 c7ce67c9237a Lib/test/test_multiprocessing.py --- a/Lib/test/test_multiprocessing.py Thu Apr 28 17:27:59 2011 +0200 +++ b/Lib/test/test_multiprocessing.py Sat May 21 00:15:36 2011 +0400 @@ -975,9 +975,19 @@ # # +def proc_flags(x=None): + import sys + attrs = ['debug', 'py3k_warning','division_warning', + 'division_new', 'inspect', 'interactive', 'optimize', + 'dont_write_bytecode', 'no_user_site', 'no_site', + 'ignore_environment', 'tabcheck', 'verbose', 'unicode', + 'bytes_warning'] + return [(attr, getattr(sys.flags, attr, None)) for attr in attrs] + def sqr(x, wait=0.0): time.sleep(wait) return x*x + class _TestPool(BaseTestCase): def test_apply(self): @@ -1003,6 +1013,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, xrange(2)) + for it in map_it: + self.assertEqual(it, flags) + + imap_it = self.pool.imap(proc_flags, xrange(2)) + for it in imap_it: + self.assertEqual(it, flags) + + imap_unordered_it = self.pool.imap_unordered(proc_flags, xrange(2)) + for it in imap_unordered_it: + self.assertEqual(it, flags) + def test_imap(self): it = self.pool.imap(sqr, range(10)) self.assertEqual(list(it), map(sqr, range(10)))