Мой сценарий должен выполнить два цикла одновременно, чтобы прочитать данные ввода-вывода из двух разных источников.Является ли мой поток правильным? - PullRequest
2 голосов
/ 10 ноября 2010
import threading
import mynetworking

def FirstNIC():

    for addr in mynetworking.first.scan():
        print addr

def SecondNIC():

    for addr in mynetworking.second.scan():
        print addr

first  = threading.Thread(target=FirstNIC)
second = threading.Thread(target=SecondNIC)

first.start()
second.start()

Это базовая структура кода, которую я намереваюсь вам. Программа будет запускать два цикла while True для чтения данных, поступающих через два разных сетевых источника. Сценарий выше должен собрать эти данные и записать их в журнал.

Будет ли этот код работать? Это хорошо? Должны ли потоки возвращать addr для основной программы для регистрации? Или мне просто заменить print addr на log(addr)?

Это мой первый раз с многопоточностью, поэтому я не совсем уверен, как это работает ...

1 Ответ

1 голос
/ 10 ноября 2010

С вашим кодом все в порядке, за исключением того, что ваши печатные отчеты могут конфликтовать, потому что они оба могут писать одновременно. Используйте Queue.queue для легкой синхронизации:

import threading
import mynetworking
import Queue

def FirstNIC(queue):
    for addr in mynetworking.first.scan(queue):
        queue.put(addr)

def SecondNIC(queue):
    for addr in mynetworking.second.scan():
        queue.put(addr)

def logger(queue):
    while True:
        print queue.get()

output_queue = Queue.queue()
first  = threading.Thread(target=FirstNIC, args=(output_queue,))
second = threading.Thread(target=SecondNIC, args=(output_queue,))

first.start()
second.start()

logger(output_queue)
...