одиночный элемент Python в многопроцессорную обработку

Вот версия 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"])
5
задан DrFalk3n 10 July 2009 в 14:27
поделиться

4 ответа

Лучше всего указать один конкретный процесс как владеющий этим экземпляром и выделенный ему; любой другой процесс, требующий доступа к этому экземпляру, получает его, отправляя сообщения процессу-владельцу через очередь (как предоставляется модулем многопроцессорности) или другие механизмы IPC для передачи сообщений, и получает ответы через аналогичные механизмы.

5
ответ дан 18 December 2019 в 14:49
поделиться

Весь смысл процессов в том, чтобы иметь разные адресные пространства. Если вы хотите обмениваться информацией между процессами, вы должны использовать некоторые средства межпроцессного взаимодействия .

5
ответ дан 18 December 2019 в 14:49
поделиться

Я не думаю, что вы можете совместно использовать экземпляр между процессами, но вы можете получить доступ к разделяемой памяти экземпляра: http://docs.python.org/library/multiprocessing. html # sharing-state-between -cesses , чтобы контролировать его состояние, если это действительно то, что вы хотите сделать.

Однако, как указано в других ответах, может быть проще добиться того, чего вы хотите, с помощью очереди.

1
ответ дан 18 December 2019 в 14:49
поделиться

В Python 2.6 модуль multiprocessing имеет объект Value , используемый для совместного использования состояния между процессами . У них есть образец кода, который должен дать вам представление о том, как разделять состояние таким образом, и вы можете использовать этот подход при написании одноэлементного класса.

2
ответ дан 18 December 2019 в 14:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: