我的脚本需要同时运行两个循环以从两个不同来源读取IO数据。我的线程设置正确吗?

2 投票
1 回答
1121 浏览
提问于 2025-04-16 06:50
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

你的代码没问题,不过你的打印语句可能会同时运行,导致输出混乱。可以使用 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)

撰写回答