Skip to main content
 首页 » 编程设计

python之我的脚本需要同时运行两个循环来读取来自两个不同来源的 IO 数据。我的线程正确吗

2025年05月04日14落叶

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)?

这是我第一次使用多线程,所以我不完全确定它是如何工作的......

请您参考如下方法:

你的代码很好,除了你的打印语句可能会发生冲突,因为它们可以同时写入。使用 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)