Вот версия Haskell:
import Data.List
main=putStrLn$unlines$map(uncurry(\n->(++)("On the "++show n++case n of{1->"st";2->"nd";3->"rd";_->"th"}++" day of Christmas, my true love gave to me: ")))$zip[1..]$(\a->(drop 4$head a):tail a)$ map(intercalate", ".reverse)$tail$inits["and a partridge in a pair tree","two turtle doves","three french hens","four calling birds","five gold rings","six geese a-laying","seven swans a-swimming","eight maids a milking","nine ladies dancing","ten lords a-leaping","eleven pipers piping","twelve drummers drumming"]
Это входит в 527 символах. С тех пор без хорошего интервала это довольно непостижимо, вот более распространенная версия:
import Data.List
main = putStrLn
$ unlines
$ map (uncurry (\n -> (++) ("On the " ++ show n ++ case n of { 1 -> "st"; 2 -> "nd"; 3 -> "rd"; _ -> "th"} ++ " day of Christmas, my true love gave to me: ")))
$ zip [1..]
$ (\a -> (drop 4 $ head a) : tail a)
$ tail
$ map (intercalate ", " . reverse)
(inits ["and a partridge in a pair tree", "two turtle doves", "three french hens", "four calling birds", "five gold rings", "six geese a-laying", "seven swans a-swimming", "eight maids a milking", "nine ladies dancing", "ten lords a-leaping", "eleven pipers piping", "twelve drummers drumming"])
Лучше всего указать один конкретный процесс как владеющий этим экземпляром и выделенный ему; любой другой процесс, требующий доступа к этому экземпляру, получает его, отправляя сообщения процессу-владельцу через очередь (как предоставляется модулем многопроцессорности) или другие механизмы IPC для передачи сообщений, и получает ответы через аналогичные механизмы.
Весь смысл процессов в том, чтобы иметь разные адресные пространства. Если вы хотите обмениваться информацией между процессами, вы должны использовать некоторые средства межпроцессного взаимодействия .
Я не думаю, что вы можете совместно использовать экземпляр между процессами, но вы можете получить доступ к разделяемой памяти экземпляра: http://docs.python.org/library/multiprocessing. html # sharing-state-between -cesses , чтобы контролировать его состояние, если это действительно то, что вы хотите сделать.
Однако, как указано в других ответах, может быть проще добиться того, чего вы хотите, с помощью очереди.
В Python 2.6 модуль multiprocessing
имеет объект Value
, используемый для совместного использования состояния между процессами . У них есть образец кода, который должен дать вам представление о том, как разделять состояние таким образом, и вы можете использовать этот подход при написании одноэлементного класса.