2015-02-26 4 views
0

Я пытаюсь найти способ сравнения между различными объектами (унаследованными от класса Thread) таким образом, чтобы сохранить parallilsm (обработка в реальном времени).Коммуникация и сравнение объектов в многопроцессорности python?

Каждый рабочий имеет три поля (сообщение, счет, n). Я обновляю Count каждый раз. Предположим, что у меня три потока: workers. Мне нужно сравнить на моем сервере на основе поля count, как я могу сделать доступ и сравнить между Worker.count каждого работника, таким образом, что я держу параллелизм

from Queue import Queue 
from threading import Thread 

import time 

class Worker(Thread): 

    def __init__(self, message, n): 
     Thread.__init__(self) 
     self.message = message 
     self.count= 0 
     self.n = n 

    def run(self): 
     while True: 
      print(self.message) 
      self.count+=1 
      time.sleep(self.n) 

class Comparator(Thread): 

    def __init__(self, message, n): 
     Thread.__init__(self) 
     self.message = message 
     self.n = n 

    def run(self): 
     while True: 
      max= max([x.count for x in threads]) # how can I access to other threads 
      print "max", max 
      time.sleep(self.n) 



thread1 = Worker("Test-1", 1) 
thread2 = Worker("Test-2", 3) 


s = Comparator("Test-3", 2) 

s.start() 
s.join() 

threads = [thread1, thread2] 

for g in threads: 
    g.start() 

for worker in threads: 
     # wait for workers 
     worker.join() 

Примечание Использование общего объекта здесь не Хорошее решение для меня, используя Queue(), например, не то, что я хочу, мне нужно сделать сравнение на основе обновленного поля в объекте, который я обновляю на ходу (для простоты я использую max()).

ответ

-1

вы можете передать threads список для Comparator__init__() метод:

[...] 
class Comparator(Thread): 

    def __init__(self, message, n, threads): 
     Thread.__init__(self) 
     self.threads = threads 

    def run(self): 
     while True: 
      max= max([x.count for x in self.threads]) 
      print("max", max) 
      time.sleep(self.n) 

[...] 
threads = [thread1, thread2] 
s = Comparator("Test-3", 2, threads) 
+0

Является ли это правильный способ сделать это? Говоря о лучших практиках здесь. – user3378649

+0

Я не уверен, но если кто-то захочет прокомментировать это, я буду рад прочитать. –

Смежные вопросы