我的脚本需要同时运行两个循环以从两个不同来源读取IO数据。我的线程设置正确吗?
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)