Experimento de roscado y cola -- python campo con multithreading campo con queue camp codereview Relacionados El problema

Threading and queue experiment


4
vote

problema

Español

Estoy empezando a tener la idea de la cola y la roscada.

Doy la bienvenida a la entrada en este guión de ejercicios:

  import Data.Char (chr, ord, toUpper)   -- A bit of self documentation help type Key = String type Msg = String   key :: Key key = "TSTING" msg :: Msg msg = "I'm not even mad... This is impressive!"   -- | Checks if character is valid for encoding isValid :: Char -> Bool isValid c = let cUp = toUpper c :: Char              in 'A' <= cUp && cUp <= 'Z'   -- | Given 'key' & 'msg' generate a list of [Maybe Int] indices -- to map 'msg' from 'key', skipping invalid characters toIdx :: Key -> Msg -> [Maybe Int] toIdx k m = map (flip mod keyN <$>) $ toIdx_ 0 m   where keyN = length k :: Int         toIdx_ :: Int -> Msg -> [Maybe Int]         toIdx_ _ "" = []         toIdx_ acc (c:cs)           | isValid c = Just acc : toIdx_ (acc + 1) cs           | otherwise = Nothing : toIdx_ acc cs   -- | Given 'key' & 'msg' generate a list of numbers representing -- the amount to shift 'msg' characters based on 'key' toShifts :: Key -> Msg -> [Int] toShifts k m = map toKey (toIdx k m)   where kUp = map toUpper k :: Key         toKey :: Maybe Int -> Int         toKey Nothing  = 0         toKey (Just x) = ord (kUp!!x) - ord 'A'   -- | Given 'by' & 'c', shift the Char 'c' by amount 'by'. 'by' can be both -- positive & negative as well as 0. shift :: Int -> Char -> Char shift by c   | isValid c && c >= 'a' = shift_ $ ord 'a'   | isValid c && c >= 'A' = shift_ $ ord 'A'   | otherwise = c   where cONorm    = ord (toUpper c) - ord 'A' :: Int         azN       = ord 'Z' - ord 'A' :: Int         shift_ :: Int -> Char         shift_ aO = chr $ aO + mod (by + cONorm) azN   -- Encode & decode a message using the given key. vigenere, unVigenere :: Key -> Msg -> Msg vigenere   k m = zipWith shift (toShifts k m) m unVigenere k m = zipWith shift (map negate $ toShifts k m) m 4  

que emite algo a lo largo de las líneas de:

  import Data.Char (chr, ord, toUpper)   -- A bit of self documentation help type Key = String type Msg = String   key :: Key key = "TSTING" msg :: Msg msg = "I'm not even mad... This is impressive!"   -- | Checks if character is valid for encoding isValid :: Char -> Bool isValid c = let cUp = toUpper c :: Char              in 'A' <= cUp && cUp <= 'Z'   -- | Given 'key' & 'msg' generate a list of [Maybe Int] indices -- to map 'msg' from 'key', skipping invalid characters toIdx :: Key -> Msg -> [Maybe Int] toIdx k m = map (flip mod keyN <$>) $ toIdx_ 0 m   where keyN = length k :: Int         toIdx_ :: Int -> Msg -> [Maybe Int]         toIdx_ _ "" = []         toIdx_ acc (c:cs)           | isValid c = Just acc : toIdx_ (acc + 1) cs           | otherwise = Nothing : toIdx_ acc cs   -- | Given 'key' & 'msg' generate a list of numbers representing -- the amount to shift 'msg' characters based on 'key' toShifts :: Key -> Msg -> [Int] toShifts k m = map toKey (toIdx k m)   where kUp = map toUpper k :: Key         toKey :: Maybe Int -> Int         toKey Nothing  = 0         toKey (Just x) = ord (kUp!!x) - ord 'A'   -- | Given 'by' & 'c', shift the Char 'c' by amount 'by'. 'by' can be both -- positive & negative as well as 0. shift :: Int -> Char -> Char shift by c   | isValid c && c >= 'a' = shift_ $ ord 'a'   | isValid c && c >= 'A' = shift_ $ ord 'A'   | otherwise = c   where cONorm    = ord (toUpper c) - ord 'A' :: Int         azN       = ord 'Z' - ord 'A' :: Int         shift_ :: Int -> Char         shift_ aO = chr $ aO + mod (by + cONorm) azN   -- Encode & decode a message using the given key. vigenere, unVigenere :: Key -> Msg -> Msg vigenere   k m = zipWith shift (toShifts k m) m unVigenere k m = zipWith shift (map negate $ toShifts k m) m 5  
Original en ingles

I'm just beginning to get the idea of queue and threading.

I would welcome input on this exercise script:

from threading import Thread as T from Queue import Queue as Q from random import randint as R import time  ''' Silly script exploring simple use of threadding.Thread and Queue.Queue '''  q = Q()  now = time.time()  def one_up(queue):         while time.time() - now <= 20:                 other_num = queue.get()                 big_num = 5*other_num                 print("       {}!?!?".format(other_num))                 queue.put(big_num)                 print("Oh yea, well I put {} in the queue!".format(big_num))                 time.sleep(1)         print("{} is a BIG number, man. Wow. Look. We made a pyramid.".format(big_num))  a_num = R(1,10) q.put(a_num) print("I put {} in the queue.".format(a_num)) t = T(target=one_up, args=(q,)) t.start() 

Which outputs something along the lines of:

    I put 5 in the queue.        5!?!? Oh yea, well I put 25 in the queue!        25!?!? Oh yea, well I put 125 in the queue!        125!?!? Oh yea, well I put 625 in the queue!        625!?!? Oh yea, well I put 3125 in the queue!        3125!?!? Oh yea, well I put 15625 in the queue!        15625!?!? Oh yea, well I put 78125 in the queue!        78125!?!? Oh yea, well I put 390625 in the queue!        390625!?!? Oh yea, well I put 1953125 in the queue!        1953125!?!? Oh yea, well I put 9765625 in the queue!        9765625!?!? Oh yea, well I put 48828125 in the queue!        48828125!?!? Oh yea, well I put 244140625 in the queue!        244140625!?!? Oh yea, well I put 1220703125 in the queue!        1220703125!?!? Oh yea, well I put 6103515625 in the queue!        6103515625!?!? Oh yea, well I put 30517578125 in the queue!        30517578125!?!? Oh yea, well I put 152587890625 in the queue!        152587890625!?!? Oh yea, well I put 762939453125 in the queue!        762939453125!?!? Oh yea, well I put 3814697265625 in the queue!        3814697265625!?!? Oh yea, well I put 19073486328125 in the queue!        19073486328125!?!? Oh yea, well I put 95367431640625 in the queue!        95367431640625!?!? Oh yea, well I put 476837158203125 in the queue! 476837158203125 is a BIG number, man. Wow. Look. We made a pyramid. 
        
 
 

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

Los nombres de variables de una sola letra suelen ser una mala práctica, con pocas excepciones (contadores de bucle, objetos de excepción atrapados). La importación de módulos con nombres de una sola letra es muy tonta. Así que no hagas esto:

  from threading import Thread as T from Queue import Queue as Q from random import randint as R   

Sólo se adhiere a Buen anticuado:

  from threading import Thread from Queue import Queue from random import randint   

Este no es un experimento muy interesante con roscado y una cola. Echa un vistazo a la Documentación , es bastante básica pero mucho más interesante, y realmente usando roscado y una cola.

 

Single-letter variable names are usually a bad practice, with few exceptions (loop counters, caught exception objects). Importing modules with single-letter names is very silly indeed. So don't do this:

from threading import Thread as T from Queue import Queue as Q from random import randint as R 

Just stick to good old-fashioned:

from threading import Thread from Queue import Queue from random import randint 

This is not a very interesting experiment with threading and a Queue. Check out the documentation, it's quite basic but much more interesting, and really using threading and a Queue.

 
 
     
     

Relacionados problema

19  Una clase de hilo-piscina / cola personalizada  ( A custom thread pool queue class ) 
Quería una clase que ejecuta cualquier cantidad de tareas, pero solo cierta cantidad al mismo tiempo (por ejemplo, para descargar varios contenidos de Interne...

2  Montón Binomial en Java  ( Binomial heap in java ) 
Tengo esta implementación de un montón de binomio que proporciona inserto, disminución de la tecla y el extracto en el tiempo logarítmico. minpriorityqueue...

1  DEQUEUE () en la implementación de la cola que utiliza una lista circular vinculada  ( Dequeue in queue implememtation that uses a circular linked list ) 
Utilizo una lista de enlaces circulares para implementar un queue , y solo sostiene un 99887776665544332 (Tenga en cuenta que 99887776655443333 enlaces a...

3  Cola de JavaScript para las funciones de ASYNC  ( Javascript queue for async functions ) 
Basado en la respuesta a Mi pregunta anterior sobre el desbordamiento de pila , armé la siguiente clase de cola. Me doy cuenta de que ya hay bibliotecas para...

4  Linkedlist para ser utilizado en una pila o cola  ( Linkedlist to be used in a stack or queue ) 
Todo esto funciona. Solo quería asegurarse de que no me perdí nada. Viniendo de C ++ y trabajando en mi camino a través de algoritmos, 4ta ed. Aquí está mi cl...

5  Cola de bloqueo con la exactitud de la lista doblemente vinculada  ( Lock free queue with doubly linked list correctness ) 
Necesito una cola de bloqueo que se implementa mediante la lista doblemente vinculada. es mi código correcto? ¿Hay algún error? ¿Hay alguna mejoras a realiz...

2  Implementación de la lista de la cola prioritaria  ( Priority queue linked list implementation ) 
Soy nuevo en Python y quería asegurarme de que mi código responde a la pregunta de mi tarea debido. Mi tarea: Una cola de prioridad es una cola en la que...

2  Cola de bloqueo delimitada  ( Bounded blocking queue ) 
¿Puede alguien por favor revise este código para mí? No he implementado todos los métodos para la simplicidad. NSUSerDefaults1 Preguntas abiertas: l...

3  Cola MultiPhread Generic Simple  ( Simple generic multithreaded queue ) 
Esta es una cola de hilo simple que se usa en un modelo de consumidor productor. public class ThreadedQueue<TType> { private Queue<TType> _queue; p...

8  Reader de cola sin bloqueo Seclador de Singler-Writer en C ++  ( Lockless queue multiple reader singler writer in c ) 
Escribí una cola sin encimera para enviar objetos pequeños desde un solo hilo a un hilo de trabajador aleatorio. suposiciones: x86 / x86_64 compilado con...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos